zoukankan      html  css  js  c++  java
  • MAC与HMAC的介绍及其在AWS和Azure中的应用

    MAC

    在密码学中,(消息认证码)Message Authentication Code是用来认证消息的比较短的信息。换言之,MAC用来保证消息的数据完整性和消息的数据源认证。

    MAC由消息本身和一个密钥经过一系列计算产生,用于生成MAC的算法,称为MAC算法。MAC算法应能满足如下几个条件:

    1. 在仅有消息本身没有密钥的情况下,无法得到该消息的MAC;
    2. 同一个消息在使用不同密钥的情况下,生成的MAC应当无关联;
    3. 在已有一系列消息以及其MAC时,给定一个新的消息,无法得到该消息的MAC。

    下图摘自维基百科,可以很好的描述MAC的使用原理:

    MAC

    HMAC

    HMAC是MAC算法中的一种,其基于加密HASH算法实现。任何加密HASH, 比如MD5、SHA256等,都可以用来实现HMAC算法,其相应的算法称为HMAC-MD5、HMAC-SHA256等。

    以下伪代码,描述了HMAC算法的计算过程:

    function hmac (key, message)
        if (length(key) > blocksize) then
            key = hash(key) // keys longer than blocksize are shortened
        end if
        if (length(key) < blocksize) then
            key = key ∥ [0x00 * (blocksize - length(key))] // keys shorter than blocksize are zero-padded (where ∥ is concatenation)
        end if
    
        o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function
        i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)
    
        return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where ∥ is concatenation
    end function
    

    我实现了一个Erlang版本的HMAC-SHA256,可以在我的github看到。

    MAC在S3和Azure Storage中的应用

    MAC是对称加密算法,S3和Azure Storage都使用其来做请求认证。

    在S3中,使用的是HMAC-SHA1:

    Authorization = "AWS" + " " + AccessKeyId + ":" + Signature;
    Signature =
        Base64(HMAC-SHA1(AccessKeySecret, UTF8-Encoding(StringToSign)));
    StringToSign = HTTP-Verb + "
    " +
        Content-MD5 + "
    " +
        Content-Type + "
    " +
        Date + "
    " +
        CanonicalizedAmzHeaders +
        CanonicalizedResource;
    

    在Azure Storage中,使用的是HMAC-SHA256.

  • 相关阅读:
    vue 文件上传
    小程序tab切换
    css实现内凹圆角样式
    vue elemnt upload 提交带参数
    解决在style添加scoped属性的情况下改变插件的css样式无效
    小程序自定义头部导航栏
    icon使用
    JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图
    ArcGIS建筑物简化和建筑物群聚合算法实验
    Java web与web gis学习笔记(二)——百度地图API调用
  • 原文地址:https://www.cnblogs.com/xinzhao/p/4898310.html
Copyright © 2011-2022 走看看