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,转至第二步。