HMAC Wiki部分翻译

注:补充一些中文wiki内未翻译的部分,可以帮助理解。限于知识水平和英文水平,有些部分可能表意不明或和原义有所偏差,请以英文版为准。

源链接:https://en.wikipedia.org/wiki/HMAC

概述

密码学中,HMAC(hash-based message authentication code)是一种包含密码散列函数和密钥的特殊MAC。HMAC和任何MAC一样,可以用于同时确保数据完整性 (data integrity)和身份验证 (authentication)。任何密码散列函数,例如SHA-256或者SHA-3都可以被用于HMAC的计算中,其产生的MAC函数被称为HMAC-X,X对应采取的散列哈希函数的方法 (如HMAC-SHA256, HMAC-SHA3)。HMAC的加密强度取决于底层的哈希散列函数的强度、产出哈希值的长度、密钥的长度和质量。

HMAC进行两次哈希加密。密钥首先用于产生一个内钥一个外钥。第一步先利用消息和内钥产生内部哈希值。第二步利用内部哈希值和外钥产生最终的HMAC码。因此这种方法对长度拓展攻击有着更好的免疫力。

迭代式的哈希函数将一条消息打碎成固定大小的消息段,并用迭代采用压缩算法。比如SHA-256将消息分为512bit的段落。HMAC的产出大小和底层哈希函数一致。比如说SHA-256就针对512bit的block操作。HMAC产出的大小和底层哈希函数一致。当然也可以自行进行截断。

HMAC并不加密数据,而是加密数据必须和HMAC码一起被发送。持有密钥的各方需自行对消息进行加密。如果密钥正确,则接收到的hash码和重新计算出来的hash码一致。

设计原则

HMAC的设计初衷是为了对抗那些专门针对key+hash function的攻击。某人可能觉得HMAC提供的安全性可以通过MAC = H(key || message)来达成,但是这种方法有一个严重的漏洞:对大多数哈希函数,我们可以轻易的在不知道密钥和另一个有效MAC码的时候,在消息后附上一些数据[长度拓展攻击]。又或者MAC = H(message || key)则会遇到一个问题:如果攻击者发现了unkeyed hash function中的冲突,则他就持有了MAC中的一个冲突(由于两个消息m1, m2产生同一个哈希值会为在附加key被哈希前,为哈希函数提供同样的起始状态,最终的哈希值会一致)。MAC = H(key || message || key) 好一些,但是很多组织已经报告了这种方法的很多漏洞。

没有已知的攻击手段能够对抗当前的 H(key || H(key || message))加密,因为外部的哈希函数掩盖了内部哈希的结果。ipad和opad的值对于算法的安全性并不关键,不过依然被保证两者保持Hamming distance,减少共同的bit数量。

SHA-3完全不需要上述的嵌套式加密,其不受长度拓展攻击影响。

HMAC简介 Wik部分i翻译相关推荐

  1. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例

    HMAC(Hash-based Message Authentication Code):基于Hash的消息认证码,是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个 ...

  2. Cairngorm 3 libraries 简介 是通过google翻译加上自己的理解得来的

    注:是通过google翻译加上自己的理解得来的,原文地址: http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm+Libraries ...

  3. 腾讯发布人工智能辅助翻译,致敬人工翻译

    来源:腾讯AI实验室 11月13日,深圳 - 腾讯AI Lab今日发布了一款AI辅助翻译产品 - "腾讯辅助翻译"(Transmart),可满足用户快速翻译的需求,用AI辅助人工翻 ...

  4. 量子计算机编程原理简介 和 机器学习

    量子计算机编程原理简介 和 机器学习 本文翻译自D-Wave公司网站 www.dwavesys.com/en/dev-tutorial-intro.html D-wave公司在2007年就声称实现了1 ...

  5. 并行计算教程简介 Introduction to Parallel Computing Tutorial

    并行计算简介 (对网上翻译文章再进行整理,可能存在些问题,请参考原贴) 1 摘要 最近项目需要实现程序的并行化,刚好借着翻译这篇帖子的机会,了解和熟悉并行计算的基本概念和程序设计.帖子的原文见这里,原 ...

  6. 【划词翻译】Ubuntu 实现划词翻译

    简介 Ubuntu 划词翻译,实现效果如下: github 地址 安装 得到鼠标选中内容 sudo apt-get install xclip 翻译工具的命令行版本 sudo apt-get inst ...

  7. [论文翻译]A SURVEY ON DEEP LEARNING METHODS FOR SEMANTIC IMAGE SEGMENTATION IN REAL-TIME

    文章地址:https://arxiv.org/pdf/2009.12942.pdf 文章目录 一.文章简介 二.正文翻译 摘要: 1. Introduction 2. 语义分割的历史 3. 图像语义分 ...

  8. 英语在线听力翻译器_英语听力翻译最新版-英语听力翻译APP下载v2.1.4-红软网

    英语听力翻译手机版下载.英语听力翻译APP是一款非常实用的手机软件,主要是针对手机在线学习英语听力知识打造的便捷平台.在APP内包含了海量的英语学习的知识,是可以从最基础的开始学习,多多练习孩子们的听 ...

  9. 多种计算机编程语言简介

    注: 本文为转载文章,如有侵权,请联络本人删除. 链接:https://www.sohu.com/a/139587085_286966 查看全文 http://www.taodudu.cc/news/ ...

最新文章

  1. mysql 并行 更新_MySQL 并行复制(MTS) 从库更新的记录不存在实际却存在
  2. Node.js实现Excel转JSON
  3. Codeforces Round #431 (Div. 2)
  4. 要比惨吗?看看这个女人
  5. php rpoplpush,RPOPLPUSH命令_视频讲解_用法示例-redis编程词典-php中文网
  6. python包之间引用_python 子包引用父包和其他子包
  7. java window.onload_JavaScript window.onload
  8. python 30个小代码_30个Python常用极简代码,拿走就用
  9. cvCreateTrackbar() 添加滚动条调节参数
  10. 三极管饱和及深度饱和状态的理解和判断
  11. mysql数据库初始化不成功_初始化mysql的数据库失败怎么办
  12. c#计算圆或者圆柱面积体积代码
  13. VerilogHDL正弦信号发生器
  14. 谷歌浏览器崩溃之后卸载无法重装的解决方法
  15. 机器人唱歌bgm_变形金刚5所有背景乐插曲盘点 长老机器人弹钢琴BGM是什么歌
  16. 和技术大咖们一起工作是怎样的体验?擎创招人进行时,你~要上车吗?
  17. 企业级用户画像:开发RFM模型实例
  18. Mysql使用Key/Value方式存储动态扩展字段、对象与HashMap的相互转化
  19. openwrt mysql改密码_openwrt的路由器重置root密码
  20. 讲座录播及课件|Tamer Özsu教授:图处理-全景式视角和开放性问题

热门文章

  1. nginx 转发 mysql地址
  2. CC2591和CC2592区别
  3. grpc stream的应用场景
  4. Powerpoint 演示时定时提醒工具
  5. iOS上下联动框架(Swift)
  6. phpinfo中的php版本与php-v的php版本不一致
  7. Fiddler抓包工具使用——学习笔记(二)
  8. 三相伺服电机接线UVW可以互换吗
  9. CentOS搭建sock5和pptp服务器
  10. 划重点,如何提升微信文章点赞?