AK/SK ##### * AK:Access Key Id, 用于标示用户; * SK:Secret Access Key, 是用户用于加密认证字符串和用来验证认证字符串的密钥,其中 SK 必须保密. * 通过使用 Access Key Id / Secret Access Key 加密的方法来验证某个请求的发送者身份。 * 【使用机制】云主机接收到用户的请求后,系统将使用 AK 对应的相同的 SK 和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。 流程 ==== * 判断用户请求中是否包含 Authorization 认证字符串。如果包含认证字符串,则执行下一步操作。 * 基于 HTTP 请求信息,使用相同的算法,生成 Signature 字符串。 * 使用服务器生成的 Signature 字符串与用户提供的字符串进行比对,如果内容不一致,则认为认证失败,拒绝该请求;如果内容一致,则表示认证成功,系统将按照用户的请求内容进行操作。 原理:: 客户端: 1. 构建 http 请求(包含 access key) 2. 使用请求内容和 使用 secret access key 计算的签名 (signature) 3. 发送请求到服务端 服务端: 1. 根据发送的 access key 查找数据库得到对应的 secret-key 2. 使用同样的算法将请求内容和 secret-key 一起计算签名(signature),与客户端步骤 2 相同 3. 对比用户发送的签名和服务端计算的签名,两者相同则认证通过,否则失败 AKSK 泄露 ========= * AKSK 安全存储手段缺失,最直白的如硬编码到业务代码中并上传 github,其次也有明文配置到配置文件并在日志中任意打印等等。 * AKSK 业务隔离手段缺失,比如多个业务共有一对 AKSK,这样任何一个业务造成的 AKSK 泄露都会导致其他业务受影响。 * AKSK 安全分发手段缺失,比如直接通过微信、企业微信等即时通讯工具对 AKSK 口口相传等等。 AK/SK概要 ========= * AK/SK 是 Access Key 和 Secret Key 的简称,这是一种常见的身份验证和授权机制,广泛应用于云服务和API访问控制中。AK/SK机制可以帮助服务提供商验证调用者的身份,并确保数据在网络传输中的安全。 原理 ---- AK/SK 机制的原理基于密钥对的方式进行身份验证和授权。用户在注册或是创建应用时,会由系统分配一对密钥:Access Key (公开) 和 Secret Key(保密)。Access Key 类似于用户ID,用于标识用户;而 Secret Key 是一个用户保密的密钥,用于生成签名(signature)以验证请求的真实性。 机制 ---- 当用户或应用程序需要访问服务时,需要按照以下步骤进行:: 1. 准备请求 用户准备一个API请求,这个请求通常包含了需要访问的资源,以及任何必要的参数。 2. 生成签名 用户使用Secret Key对请求进行签名。 这个签名通常是通过一个标准的加密算法(如HMAC-SHA256)生成的 它会结合请求的元素,比如HTTP方法(GET、POST等)、请求的URI、时间戳、参数等信息 3. 发送请求 用户在API请求中包含Access Key和这个签名,然后将请求发送到服务器 4. 验证签名 服务器接收到请求后,会查找与Access Key相关联的Secret Key 然后使用相同的算法和请求信息,自行生成一个签名 5. 授权与响应 服务器将自行生成的签名与用户发来的签名进行比较 如果两者匹配,服务器就会认为这个请求是合法的,并且进一步处理请求 否则,会拒绝请求并返回错误信息 安全性 ------ * AK/SK机制的安全性在很大程度上依赖于Secret Key的保密性,如果Secret Key泄露,攻击者就可以伪造合法的请求。因此,用户需要妥善保管Secret Key,并定期轮换以降低风险。 为了提高安全性,通常还会结合以下措施:: 1. HTTPS 使用HTTPS协议加密数据传输,以防止中间人攻击和数据泄露 2. 时间戳 请求中包括时间戳,服务端通常会检查时间戳以确保请求是最近发出的,以防止重放攻击 3. 权限控制 服务端可以根据Access Key识别用户,并根据用户的权限控制其对资源的访问 4. 日志记录 记录所有API请求日志,以便在出现安全事件时进行调查 * 总的来说,AK/SK是一种简单而有效的身份验证和授权机制,通过正确的实施和管理,它可以为API和云服务提供安全的访问控制。