文章目录
洛奇曾经的工作内容之一,就是负责芯片的安全启动,数据加解和解密,数据签名和验签,还有各种芯片的熔丝OTP(One Time Program)操作,在这一方面多少有一些水水的经验和看法,专门开一篇集中讨论各种密码学及安全相关问题。
本文持续更新。欢迎在评论区留下你的问题或加微信讨论。
近期密码学相关文章汇总:
1. 国密算法
1.1 国密算法为什么叫SM?
国密算法的全称是国家商用密码算法,简称国密,或商密(比较少这么叫,一般都叫国密);SM是商密拼音"Shang Mi"的简写。
2. 哈希函数
2.1 SHA1/SHA2/SHA3是如何划分的?
2.2 SHA3是SHA2的替代品吗?
由于SHA3在SHA2之后颁布,SHA3完全可以兼容SHA2,所以SHA3作为SHA2的下一代,目的就是用于替换SHA2。这种说法将来可能是正确的,但当下不是。
目前SHA-2并没有被破解,NIST认为它对于一般应用是安全的,所以NIST还没有停用SHA-2算法的打算。因此,当前SHA-3对于SHA-2是一种补充或者备用方案而不是替代。
“Currently only the four fixed-length SHA-3 algorithms are approved hash algorithms, providing alternatives to the SHA-2 family of hash functions.”
来自: https://csrc.nist.gov/projects/hash-functions
从官方文档的摘要来看,SHA-3标准FIPS-202是对FIPS-180-4的补充,而不是我们理解的替代关系。
“The hash functions specified in this Standard supplement the SHA-1 hash function and the SHA-2 family of hash functions that are specified in FIPS 180-4, the Secure Hash Standard.”
来自: FIPS-202, Abstract
有一种可能,如果将来SHA2的弱点被发现了,NIST会要求停用SHA2,这样SHA3就会是SHA2的替代方案。
2.3 SHA3和Keccak算法一样吗?
Keccak算法根据内部处理bit能力的不同,包含{25, 50, 100, 200, 400, 800, 1600}几种,其中{25,50}两种因为处理bit位太短,强度不够,主要是演示Keccak原理使用,实际没有算法使用。
Keccak算法设计小组在2008年,将Keccak-f[1600]提交NIST参与SHA3竞赛,并于2012年底最终胜出。
因此SHA3标准由Keccak算法演化而来,在很多场合下Keccak和SHA3是同义词,但在2015年8月SHA3最终完成标准化时,NIST调整了填充算法:
SHA3-224(M) = KECCAK[448] (M || 01, 224)
SHA3-256(M) = KECCAK[512] (M || 01, 256)
SHA3-384(M) = KECCAK[768] (M || 01, 384)
SHA3-512(M) = KECCAK[1024] (M || 01, 512)
所以SHA3的四个算法,相当于Keccak-f[1600]对应算法追加了比特串01后的结果。
也因此,NIST标准的SHA3和Keccak计算的结果不一样。
在忽略一些小细节的基础上,我们将SHA3和Keccak当做是一样的。
参考1: https://www.cnblogs.com/HachikoT/p/12792362.html
参考2: FIPS-202, Section 6.2
3. 加解和解密
3.1 传统的对称密码已经过时了吗?
答案: 没有。
当前主流的非对称密钥(公钥密码)计算量非常大,完全替代传统的对称密码几乎不可能。所以公钥密码主要用在密钥管理和签名这类应用中。
通常,使用公钥密码机制传递和交换对称密码(数据量小),然后用对称密码来加解密数据(数据量大)。
参考: 《密码编码学与网络完全》第七版
3.1 非对称密码比对称密码更安全吗?
答案: 没有。
一种误解是,从密码分析角度讲,公钥密码比传统密码更安全。事实上,任何加密方法的安全性依赖于密钥的长度和破译密文所需要的计算量。从抗密码分析的角度看,原则上不能说传统密码优于公钥密码,也不能说公钥密码优于传统密码。
来源: 《密码编码学与网络完全》第七版
4. 签名和验签
5. OTP
5.1 什么是OTP?
OTP(One Time Programmable),顾名思义,是一种只可以写一次的的存储器(可以读取无数次),数据一旦写入,便不能再改动,而且永久有效。现在很多芯片,如主芯片,Nandflash和eMMC存储器芯片内部都集成了OTP存储器,所以对芯片来说,这个OTP看起来就像存储器的一个区域,只不过这部分存储器区域只能写一次。
这有点像很多年前的VCD或DVD,实际上VCD和DVD又可分为一次性写入和可反复擦除两种。OTP就像一次性写入的DVD。不同的是DVD刻录需要用专门的刻录机,而OTP只需要向芯片发送指定的命令。
5.2 为什么OTP又叫熔丝?
在具体实现上,OTP又分为CMOS Floating Gate, eFuse, Antifuse几种,实现的细节不是我们关注的重点。基于CMOS的方式比较古老,现在常见的就是eFuse和Antifuse。
单词fuse,做名词时,叫保险丝;做动词时叫熔断。
OTP为什么叫fuse? 看看物理结构就知道了。
下图(图1)是一张传统样式的保险丝:
图1. 传统样式保险丝
在保险丝盒的两端分别有一个基座,中间用一根保险丝连接,当电流过大时,保险丝发热熔断。
下图(图2)是一张高通20nm芯片已编程的eFuse的放大视图,制造商是TSMC(台积电)。
当编程写入后,原来连接的fuse发生熔断。一个熔断位用1 bit表示,熔断前值为0,熔断后值为1。这张图片中包含了两个eFuse,右侧已经熔断。
图2. 高通20nm芯片已编程的eFuse的放大视图
来源: Qualcomm Gobi MDM9235调制解调器20纳米HKMG逻辑详细结构分析,TechInsights
对比上下两张图,物理结构是不是一毛一样?所以,很多人将对OTP区域进行编程的操作又叫熔丝(fuse)。
从这张图我们也可以看到,如果一个OTP为已经熔断了,那还能连接回去么?不能了。这就是为什么OTP只能写一次。写了就改不了了。
其它
洛奇工作中常常会遇到自己不熟悉的问题,这些问题可能并不难,但因为不了解,找不到人帮忙而瞎折腾,往往导致浪费几天甚至更久的时间。
所以我组建了几个微信讨论群(记得微信我说加哪个群,如何加微信见后面),欢迎一起讨论:
- 一个密码编码学讨论组,主要讨论各种加解密,签名校验等算法,请说明加密码学讨论群。
- 一个Android OTA的讨论组,请说明加Android OTA群。
- 一个git和repo的讨论组,请说明加git和repo群。
在工作之余,洛奇尽量写一些对大家有用的东西,如果洛奇的这篇文章让您有所收获,解决了您一直以来未能解决的问题,不妨赞赏一下洛奇,这也是对洛奇付出的最大鼓励。扫下面的二维码赞赏洛奇,金额随意:
洛奇自己维护了一个公众号“洛奇看世界”,一个很佛系的公众号,不定期瞎逼逼。公号也提供个人联系方式,一些资源,说不定会有意外的收获,详细内容见公号提示。扫下方二维码关注公众号: