章节大纲

  • 到目前为止,我们已经看到通过将密钥和消息连接在一起计算 MAC 所造成的危害。在此任务中,我们将改正这一错误。计算 MAC 的标准方法是使用 HMAC 。学生应该修改服务器程序的 verify_mac() 函数,并使用 Python 的 hmac 模块来计算MAC。该函数位于 lab.py 中。给定密钥和消息(均为字符串类型),计算 HMAC 如下所示:
    mac = hmac.new(bytearray(key.encode('utf-8')),
                   msg=message.encode('utf-8', 'surrogateescape'),
                   digestmod=hashlib.sha256).hexdigest()

    在使用 HMAC 进行 MAC 计算时,学生应重复任务 1 以发送列出文件的请求。假设选择的密钥是 123456 ,则可以通过以下方式计算 HMAC :
    $ python3
    Python 3.5.2
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information
    >>> import hmac
    >>> import hashlib
    >>> key='123456'
    >>> message='lstcmd=1'
    >>> mac = hmac.new(bytearray(key.encode('utf-8')),
                       msg=message.encode('utf-8', 'surrogateescape'),
                       digestmod=hashlib.sha256).hexdigest()

    学生应说明为什么当客户端和服务器使用 HMAC 时,使用长度扩展和附加命令的恶意请求将使 MAC 验证失败。