ak演算法
⑴ 演算法競賽 AK 是什麼意思
all kill的簡寫,表示通過了所有題目
⑵ 常見認證機制總結
閱讀這篇文檔你可以了解到一些常見的認證方式及其優缺點,在實際場景中該如何去搭配各種認證方式。
了解 Authorization 前,需要先了解滲改以下術語
認證是對身份的一種確認過程;也可以說是身份有效性的確認;Are you who you say you are?
授權是指對行為或資源允許的過程;Are you allowed to do this action?
對應的是鑒權,是對行為或資源是否叢盯判允許的確認過程
資源的擁有者,一般都是用戶自己
資源的認證伺服器,提供 Authorization Endpoint 及 Token endpoint
請求 authorization API
請求 access_token API
資源伺服器,具體的 Service 上的 API
需要申請訪問資源的應用,可以是 APP、JS APP、Server 等
Access token 是由 Authorization Server 通過安全認證後,生成臨時用於訪問 Resource 的憑證;
JWT 就是一種具體的實現方式.
可以標識身份;
也可以是 self-contain 認證許可權信息;
一般有效期較短;
用於 Resource Server 的請求中
可以參考 JWT ,
有個使用中的小問題,記錄下
Base64URL 與 Base64 演算法
Base64 有三個字元+、/和=,在 URL 裡面有特殊含義,所以要被替換掉:=被省略、+替換成-,/替換成_ 。這就是 Base64URL 演算法。JWT 會使用 Base64URL 編碼的,主要是考慮到一般 jwt Token 會直接被放在 URL 上。
Refresh token 是由 Authorization Server 通過則雀安全認證後,生成用於長時間內獲取 access_token 的憑證;
僅用於 Authorization Server 的請求中(不可傳輸給其他服務);
若 access_token expire 了,則使用 Refresh token 去 Authorization Server 重新獲取;
refresh token 可以管理 access token,防止 access_token 被多個 client 使用;
參考
參考
該方式在調用 API 前需要先在該 API Provider 那申請一個(對)API key,如 APPID 和 APPSecret,在請求的過程中在 query 或 header 中加上這個(對)API key;其中 APPSecret 一般都是在 Server-to-Server 的場景中使用,而 APPID 可通過終端 JS 傳遞到後端伺服器,然後獲取內存中的 APPSecret,一起放在 query 或 header 中轉發到 API 服務;
圖中因為僅考慮認證的機理。
優點:
這種認證模式的好處就是簡單且能識別 API 調用者的身份;
有 APPSecret,所以一般都是在 Server-to-Server 的場景中使用;
該方式其實就是採用了 base64 對 username 及 password 進行混淆編碼後放在 header 中,形如
該方式比較簡單,但是如果在互聯網傳輸,那麼需要保證協議是 https 的,防止被攔截解碼獲取明文。
該方式是一種更高級別、更安全的授權方式,API provider 與 API caller 事先約定一個 Secret Key 及演算法,然後保證只有雙方知道,Caller 在調用 API 時,按照雙方規定的演算法對請求進行簽名,得到 signature,並將該 signature 一並發到 Server 端,Server 端同理對請求進行簽名,也得出一個 signature,然後對比兩個 signature 是否 match,match 則認證通過,否則拒絕;
該方式重點就是在保存 Secret Key,所以一般 Web 或能直接查看到 JS 源碼的場景都不適用;一般在 IOS、Android 等 Native 應用中使用場景較多;
優點:
OAuth2.0 主要是解決了在互聯網上 Resource Owner 與 Client Application、third-parties 訪問數據安全的問題。提供了一套安全的認證標准。
該認證方式是一種較安全的認證方式(雖然流程看起來復雜),其中主要是涉及到兩個步驟一個是授權服務請求 authorization 過程,另一個是 Application client 請求 access_token 過程(這里有 CORS 問題,所以 Authorization Server CORS 必須是 allow 的),在網上找到以下圖,完美使用了 Authorization Code 的認證方式;
解析
雖然目前 Authorization Code 的方式還是使用的比較多,但據 APP 開發童靴了解到,在 APP 端惡意的 APP 的確能攔截到 Authorization Endpoint 的響應,獲取到 code,然後去獲取 access_token 的問題。具體的問題可參考 IETF,感興趣童鞋可搜索【IOS 逆向安全】相關話題。
下圖是 Authorization Code 認證方式擴展後的認證方式即 PKCE,主要差異有兩點:
該方式是一種 Authorization Code 的簡化後的認證方式,它將交換 Authorization Code 請求直接簡化(刪除),Application Client 直接攜帶 client_id 去發起 request access_token 的請求,即省略了圖中的 ⑥⑦ 步驟,直接跳到 ⑧ 返回 access_token。
【前世今生】
該方式最初是為了給 Native APP 和 JS APP 使用的,它所出現的原因是因為最初瀏覽器有 CORS 的困擾,POST 請求只能在同 domain 下訪問 Authorization Server(見圖中 ⑤ 輸入賬號密碼後向自己的 AuthorizationServer 請求認證)而 ⑦ 步驟是 POST 請求且跨域,無法實現,所以省略了 ⑥⑦ 步驟,是一種妥協的方案;而如今 CORS 已不是什麼問題,只要 Server 允許就可以訪問,但現在已經推薦使用 PKCE 的方式去實現。
authorization 請求
其 response 僅僅是採用了 access_token
IETF 規定 Authorization Server 上 Authorization Endpoint 必須同時支持 POST 和 GET 請求,而 Token Endpoint 必須僅支持 POST 請求。
認證流程,如圖
邏輯相對較簡單,對於用戶而言,基本沒有授權可言(可能用戶就不知道有後面這一步)。
2 中請求
認證流程,如圖,該認證方式一般在安全可信且是 https 的 server-to-server 場景中使用
1 中請求
目前在國內大部分雲廠商都是採用 AK/SK 的認證模式;一般都是先在雲廠商平台注冊應用,並生成一對 access key 和 access secret,然後對請求參數及其它按照雲廠商提供的演算法生成簽名,簽名與 access key 一起發送到伺服器端,然後使用相同的演算法生成簽名,比較。這種方式相對其它的認證方式會更安全,一般使用場景是在 machine-to-machine(M2M),保證了 access secret 不會被泄露且不會在網路中傳輸,一般情況下生成簽名的演算法也都是不可逆的,所以即使被攔截也無法篡改數據;
大致描述了 AK/SK 的簡單過程,signature 的演算法也可以參考該地址
可以與 HMAC 進行對比下,可能會發現比較相似,可以認為是升級版。
最後推薦一個網站,需要設計 Authorization Portal 的可以參考一波。
https://aaronparecki.com/oauth-2-simplified/
https://tools.ietf.org/html/rfc7636#section-1.1 PKCE
https://www.ibm.com/support/knowledgecenter/zh/SSPREK_9.0.4/com.ibm.isam.doc/config/concept/oauth_pkce.html PKCE
https://oauth.net/2/ OAuth
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS CORS
https://tools.ietf.org/html/rfc6749#page-21 Token Endpoint 及 Authorization Endpoint
https://support.huaweicloud.com/devg-apisign/api-sign-algorithm.html AK/SK
https://juejin.im/post/5c9ada58e51d453fea4a99bc
https://jwt.io/introction/ JWT
https://tools.ietf.org/html/rfc7519 JWT
⑶ 公有雲API的認證方式:Token認證和AK/SK認證
公有雲API的認證方式
一般有以下幾種認證方式:
Token認證
AK/SK認證
RSA非對稱加密方式
Token認證
使用Token認證方式完成認證鑒權時,用戶首先需要獲取token,在調用介面時增加「X-XXX-Token」到業務介面請求消息頭中。
流程
原理:任何請求,都附帶token;服務端根據token判斷請求是否合法。
缺點:若是報文在中途被劫持,那麼token就泄露了,這時(token有效期內)黑客就能夠構造任意的請求了。
2 AK/SK認證
2.1 AK/SK 原理
雲主機需要通過寬亂使用Access Key Id / Secret Access Key加密的方法來驗證某個請求的發送者身份。
Access Key Id(運巧改AK)用於標示用戶,Secret Access Key(SK)是用戶用於加密認證字元串和雲廠商用來驗證認證字元串的密鑰,其中SK必須保密。 AK/SK原理使用對稱加解密。
2.2 AK/SK使用機制
雲主機接收到用戶的請求後,系統將使用AK對應的相同的SK和同樣的認證機制生成認證字元串,並與用戶請求中包含的認證字元串進行比對。如果認證字元串相同,系統認為用戶擁有指定的操作許可權,並執行相關操作;如果認證字元串不同,系統將忽略該操作並返回錯誤碼。
2.3 流程
判斷用戶請求中是否包含Authorization認證字元串。如果包含認證字元串,則執行下一步操作。
基於HTTP請求信息,使用相同的演算法,生成Signature字元串。
使用伺服器生成的Signature字元串與用戶提供的字元串進行比對,如果內容不一致,則認為旁判認證失敗,拒絕該請求;如果內容一致,則表示認證成功,系統將按照用戶的請求內容進行操作。
原理:
⑷ [轉載]公有雲API的認證方式:AK/SK 簡介
一般有以下幾種認證方式:
下面主要介紹AK/SK。
雲主機需要通過使用 Access Key Id / Secret Access Key 加密的方法來驗證某個請求的發送者身份。
其中SK必須保密。熟悉非對稱加密的的話,舉個例子:AK相當於非對稱加密的公鑰,而SK相當於非對稱加密的私鑰。 公鑰加密信息,只能由對應的私鑰才能解密,這是基知嘩判本原理。 AK/SK也是如此。
雲主機接收到用戶的請求後,系統將使用相同的SK和同樣的認證機制生成認證字元串,並與用戶請求中包含的認證字元串進行比對。如果認證字元串相同,系統認為用戶擁有指定的操作許可權,並執行相關操作;如果認證蘆伍字元串不同,系統將忽略該操作並返回錯誤碼。
判斷用戶請求中是否包含Authorization認證字元串。如果包含認證字元串,則執行下一步操作。
基於HTTP請求信息,使用相同的演算法,生成Signature字元串。
使用伺服器生成的Signature字元串與用戶提供的字元串進行比對,如果內容不一致,則認為認搭改證失敗,拒絕該請求;如果內容一致,則表示認證成功,系統將按照用戶的請求內容進行操作。
原文: https://blog.csdn.net/makenothing/article/details/81158481
⑸ AK/SK【HMAC】 認證
1. 客戶端需要在認證伺服器中預先申請 AK 和 SK
2. 在調用 API 的時候,除傳遞請求必要的參數之外,還需要傳輸一個通過 HMAC 演算法生成的一個簽名串【簽名串的生成方法後面講】
3. 伺服器通過預先留存的 AK 和 SK 進行同樣的摘要演算法計算,得到衫埋的結果與客戶端傳輸的額外的參數進行比對,如果一致,則認為該請求是有效的;否則將拒絕處理這次請求,並返回 HTTP 403
假設請求的 URL 格式為 https://.com/gate/move/?c=2&b=1
目前的實現方式無法抵禦重放攻擊;因此我們需要在簽名時放入一下干擾信息
在業界標准中解決這個問題有兩種典型的做法
1)質疑/應答演算法【OCRA: OATH Challenge-Response Algorithm】
質疑/應答演算法需要預先客戶端先請求一次伺服器,獲得 HTTP 狀態碼為 401 未認證的返回,並得到一個隨機字元串(nonce)。將 nonce 附加到按照上面說到的方法襪卜進行 HMAC_SHA1 簽名,伺服器使用預先分配的 nonce 同樣進行簽名校驗,這個 nonce 在伺服器只會被使用一次【當然你可以給這個nonce設置一個有效期,只要在有效期之內均可以使用】,因此可以提供唯一的摘要
2)timestamp+nonce方案
nonce 指唯一的隨機字元串,用來標識每個被簽名的請求,通常為每個請求提供一個唯一的標識符,伺服器能夠防止請求被多次使用【記錄所有用過的 nonce 以阻止它們被二次使用】;但是對於伺服器永久存儲所有接收到的 nonce 的代價非常大,因此可以通過 timestamp 配合 nonce 進行優化
假設客戶端和服務端最多能存在或好螞 1 分鍾的時間差;服務端需要記錄客戶端所有的 nonce 請求集合,當有新的請求進來後,檢測當前攜帶的 nonce 是否在集合中存在;
如果不存在,則記錄該 nonce 的值,有效期為 1分鍾;
如果存在,則說明客戶端在一分鍾內進行了重復的請求,則拒絕服務;
⑹ AK替換演算法
在數學中,序列就是按照
一定的順序排列的一列數,
其實就是數列的意思。
序列{ak}就是數列:閉困
a1,a2,a3,…,ak,戚核…
(這里僅僅是把平時習慣
寫成n的序號寫成了轎仔念K而已)。
可能是你習慣了數列的叫法,
說成序列一時不適應罷了。
⑺ 免疫演算法的演算法流程
1. 隨機產生初始父代種群A1,根據先驗知識抽取疫苗;
2. 若當前群體中包含最佳個體,則演算法停止運行並輸出結果;否則,繼續;
3.對當前第k代父本種群Ak進行交叉操作,得到種群Bk;
4. 對Bk進行變異操作,得到種群Ck;
5. 對Ck進行接種疫苗操作,得到種群Dk;
6. 對Dk進行免疫選擇操作,得到新一代父本Ak+1,轉至第二步。