上接前文:信息保护与密码学

 

  • 混合密码Hybrid Cryptosystem
  • 单向哈希函数
    • 抗碰撞特性Collision Resistance
    • 哈希函数发展史
    • 哈希函数面临的攻击
  • MAC(Message Authentication Code)
    • 认证加密
    • aHMAC
    • 针对MAC的攻击
  • 数字签名
    • 应用场景
    • 关于数字签名的常见疑问Q&A
    • 数字签名面临的攻击
  • 认证书与认证机关
    • PKI(public-key infrastructure)
    • 认证书面临的攻击
    • 认证书的必要性
  • 密钥
    • Diffie-Hellman 密钥交换
    • PBE(password based encryption)
  • 随机数
    • 真随机数
    • 伪随机数
    • 对PRNG的攻击

在了解了密码学基本的结构后,我们可以发现,单纯的加密与解密并不能保证安全,因为所有的信息可以伪造,且在通信方不值得信赖时,可以抵赖等。下面将逐步随着风险的变化,安全系统的升级过程。

 

混合密码Hybrid Cryptosystem

先来比较总结一下公钥加密与对称加密。

项目 对称加密 公钥加密
密钥关联性 加密与解密使用同一个密钥 加密与解密使用不同的密钥
加密密钥 保密 公开
解密密钥 保密 保密
加密算法 保密/公开 公开
典例 DES\Vernam RSA
密钥配送 必须 不需
密钥个数 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n−1)​ 2n
安全认证 困难 简单
加密速度 高速 低速
经济效益
暴力解码 复杂 简单

对称加密在保证机密性的前提下仍然可用,但是需要解决密钥配送问题。而公钥加密虽然无密钥配送问题,却存在效率短板且会面临中间者攻击(MITM 攻击)。那么为了提高安保系统的健全性,我们需要的是在一定经济基础下能够尽可能让安全性更高且处理速度更快,混合密码系统便应运而生。

混合密码系统(Hybrid Cryptosystem):利用对称加密的告诉与公钥加密的安全性,两者结合使用的密码系统。本质是对于信息使用高速的对称加密,对于对称加密过程中使用的密钥本身则使用公钥加密技术来传输。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论
如图所示,用伪随机数生成器生成一个随机数,将这个随机数当做即将进行的加密通信的密钥,用该临时密钥加密明文,我们将临时密钥用K表示,即 C 1 = E K ( P ) C_1=E_K(P) C1​=EK​(P)。然后我们用接收端、收信人的公钥加密该临时密钥,被加密的临时密钥只有收信人使用其私钥才能解密,即 C 2 = E k p b ( K ) C_2=E_{k_{pb}}(K) C2​=Ekpb​​(K).将密文C1C2组合后,传输给对方。该组合信息即便被截获,对于截获者而言,由于没有对应私钥无法解密出临时密钥,也就无法解密出明文。解密过程则反其道而行之,可以只使用临时密钥加密信息后传输,因为临时密钥此阶段后只有双方知道,也可以重复该流程。

可以说,对于一个混合密码系统,其安全性无非体现在三个方面,也就是伪随机数生成器、公钥密码、对称密码三部分。如果想要提升混合密码系统的强度,也就是提升这三部分各自的强度即可。而提升强度也会面临开销问题,在此问题下,仍然要秉着平衡的原则去设计一个完整的密码系统。密码系统需要木桶理论,需要三方面长度均衡,如果出现明显的短板,就会被针对攻击,如果综合不够强,那么对应的就是定价低廉且使用频率及认可用户少。

  • 伪随机数生成器:生成的临时密钥由于是伪随机,因此总有一定规律可言,真随机数生成器依靠软件无法实现,必须使用硬件来完成,对应的就是高昂的造价。因为有规律,则一定是依照某种规律进行循环,只不过循环足够大,则在一定空间内不会重复,仅此而已,因而如果使用的伪随机数生成器品质不够好,则临时密钥本身有被推测到的可能性。
  • 对称密码:除了加密算法本身的复杂性,任何密码其安全性直接挂钩密码长度,1位的密码在二进制中只有2种可能,十进制只有十种可能,因此要密码的安全性就要提高密码的长度。同时使用恰当的块加密模式也能提高密码安全性,如CTR以及CBC等。也就说,提高公钥密码的安全性有提高密码长度、加密算法复杂度、采用加密模式等方式。
  • 公钥加密:加密算法复杂性以及密码长度的增加都会提高安全性。从长期运营的角度考虑,公钥加密的安全性最好比对称加密的安全性稍强一些才能保证混合密码系统的整体安全。

典例:同态加密(Homomorphic Encryption)
同态加密是指对明文进行环加法和乘法运算再加密,与加密后对密文进行对应的运算,结果一致。因而人们可以委托第三方对数据进行处理而不泄露信息。是可能进行机器学习和深度学习的密码技术。因为机器学习和深度学习可以用加法和乘法表示,所以利用同态加密可以在加密状态下进行机器学习和深度学习的数据分析。

优点:计算机中,所有数据本质上遵循门运算(AND.OR.NOT),加密状态下可以进行这三种运算就意味着可以在加密状态下进行所有运算。加密后的数据再进行运算后形成的数据 复杂度大幅度提高,分析将变得极其困难,对于黑客将是非常大的挑战。

缺点:存在密文扩张的问题,在对称加密中,同态加密可能会导致密文长度扩张一万倍以上,加密速度相当慢。AES 1 μ s 1μs 1μs而RSA 1 m s 1ms 1ms而同态加密需要数十毫秒。密文的乘法运算则需要数百毫秒,根据运算应用场景速度差距会很大,虽然能够针对个别优化,但是其效率是显著短板。

应用的案例1:健康保险企业云数据库,有病人的详细信息。一般的企业内职员可以轻易浏览到这些数据,那么某些高层领导也可能在列,这种情况下就会出现信息泄露的风险。此时如果将数据库进行同态加密,一般职员处理数据时使用的密文状态(增删查改、浏览),只要当确认要调出某一个体用户时才解密到明文,就能减少内部信息的泄露。

应用案例2:医疗手环。运动手环在现代已经很常见,除了最基本的手表功能还增加了很多健康相关的诊断功能,某国外高级医院中,对住院病人会有给其佩戴诊断手环的情况。住院病人的心率血压等数据以及个人信息会被存储在后台数据库,而为了保密隐私,使用同态加密技术将病人信息加密,护士等非直接负责人检索时,检索到的是加密后的运算结果,只有反映到具体责任人查看病人身体情况时,会解密到明文,责任医生可以远程观察病人身体状况并开药诊断。

单向哈希函数

针对CIA系统中的完整性,确保这个文件是真的这个文件是否被篡改。前面说过的再传送攻击以及中间人攻击等,本质都是伪造数据并令接收人认为是正确数据,从而达到一些企图。

当我们编辑完一个文件然后关机睡觉起床,再打开这个文件,请问这个文件真的是昨天的文件吗,还是其他人伪造的这个文件?如何判别?
最简单的方法是:当我们编辑完这个文件,我将其复制一份到我的硬盘上并拔下硬盘,然后第二天我比较硬盘中的数据与计算机中的数据是否一致。这里硬盘就是安全的场所。想要验证完整性,最好的方法就是将想要确保安全性的物品保存到一个安全的场所,然后在需要检验时,从安全的场所中取出来进行比对,因为我认为这个场所是安全的,所以我默认其是真的,与之不同则认定是为假的。也就是说,本质上这种方法只能验证出数据是否发生过改变,但是断言说真与假就过于片面。

说到真伪的判断,不得不得提指纹了。假设有一个犯罪嫌疑人,与其相当相近的身材外貌出现在监控上,当我们想要调查他时,由于监控不清楚,我们比着监控看人和比对现场的指纹和他的指纹,肯定是后者更容易。后者具备指纹编写,验证方便,且不可否认(你说你没有,但是凶器上有你的指纹,这就是证据,想要推翻这个证据需要新的证据,如果无法提供则将认定其供词为假)。那么作为数据文件,能否有文件的[指纹]来方便我们进行操作呢?

哈希函数:可以成为文件的指纹来提供验证完整性。我们将昨天的文件通过哈希函数转化为哈希值后,与今天的文件通过同一个哈希函数转换成的哈希值进行数据比较,如果二者相同则认定昨天的文件就是今天的文件,至少他们数据没有被改变,但是持有者是可能不同的。哈希函数可以当做文件的指纹,你当然持有你的指纹,但并不意味着除你以外的人就不持有你的指纹,是哈希函数的风险所在。

简单的哈希函数例子:我们将一个输入除以23,并将其小数位第7~10位作为哈希函数值。则345689的哈希值是7391,因为他们的商是15029.95652173913043…

单方向哈希函数one-way hash function:单方向哈希函数是指通过哈希函数将输入变为输出后,利用输出反向推理出输入非常困难的函数。单方向哈希函数是后文要讲解的几项认证技术与密码技术的基础。
特点:

  1. 输入与输出的长度无关联,任意长度的输入 可以输出任意长度的输出。标准是不同的哈希函数。
  2. 哈希函数的输出往往是固定的,同一个哈希函数(SHA-1为例),不论输入是多少bit,输出固定为160bit。
  3. 哈希值运算过程是高速的。给定输入计算出输出虽然高速,但是输入位数越多,运算时间自然会变长。
  4. 信息不同,哈希值不同,具有单方向性,只要输入变动,输出一定会变动,但变动频率等特点不会反映到彼此上。即便输入只变更了1bit数据,输出也极大可能截然不同。

抗碰撞特性Collision Resistance

碰撞(Collision):不同的输入,经过哈希函数后得到了相同的输出。
抗碰撞特性(Collision Resistance):发现碰撞的概率非常小的性质。即H(x)=H(y),已知H(x)的情况下找到一个y非常难的性质。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_02

  • Preimage Resistance: 想要找到关于y=H(M)的M从算术上不可能
  • 2nd Preimage Resistance: 想要找到满足H(x)=H(y)且x≠y的y非常困难
  • Collision Resistance:想要找到满足H(x)=H(y)且x≠y的y从算术上不可能。换言之具有强单方向性。
  • 单方向性:从输入计算输出非常简单,但是从输出计算输入却非常困难,无法通过哈希值逆算原信息的性质。

哈希函数中的一些用语:

名称 别名
单方向哈希函数 信息数字化函数;信息压缩函数;加密哈希函数
单方向哈希函数的输入 pre-image(初像)
哈希值 信息数字(message digest); 指纹(Fingerprint)
完整性 无缺性;完整性;保全性

应用的例子:

  1. 自己入手的软件是否被篡改的验证。 单位中的应用软件通过哈希函数生成哈希值并保存到移动硬盘上,下班上班后,要确认自己企业电脑中的应用程序是否被修改过数据,此时可以使用将当前状态下的应用程序用哈希函数输出一个哈希值与自己移动硬盘中的比较,对比结果即可知道数据是否被修改过。
  2. Password Based Encryption(PBE):以密码为基础的加密。在PBE中将password和salt混合后通过哈希输出哈希值,并把这个哈希值当做加密的密钥。可以防止密码字典攻击。
  3. 信息认证代码MAC:目前在SSL和TLS中使用。通信过程中可以检测出伪造,将明文和密钥混合后输出哈希值来使用。
  4. 数字签名:为了简化签名过程,将明文用哈希值来替代,然后将这个哈希值进行数字签名来验证。
  5. 伪随机数生成器:需要通过满足之前的随机数列不能在现实意义上被用来推测出未来的随机数列的性质,为了保证这个性质的实现,需要使用单方向哈希函数。
  6. One time password:一次性密码。企业中用来验证是否是真正的客户,即便该密码泄露也无法被恶意使用。
    Ps)23456项是问本文后面的重点,因此在这里不过长的叙述。

哈希函数发展史

哈希函数 备注
MD4 Rivest于1990年创造的单方向哈希函数,128bit哈希值,现在不安全。
MD5 Rivest于1991年创造的单方向哈希函数,128bit哈希值,展现了很多种破译密码的方式。虽然不能说MD5完全无用,但是已经发现了数个MD5内部构造的漏洞,与SHA-1同时间被破解,不安全。
SHA-1 NIST(National Institute of Standards and Technology)制作,160bit哈希值,1993年美国的联邦信息处理标准,于95年发表改进版,可以计算的信息上限是264bit。近几年已被破解。
SHA-256 256bit哈希值,264 计算上限,属于SHA-2
SHA-384 384bit哈希值,2128 计算上限,属于SHA-2
SHA-512 512bit哈希值,2128 计算上限,属于SHA-2。可以处理1024bit的数据块,进行块计算
RIPEMD-160 1996年Hans Dobbertin, Antoon Bosselaers, Bart Preneel制作,160bit哈希值,使用European Union RIPE 项目改进的RIPEMD函数
SHA-3 NIST为了替代SHA-1于2007年开始准备SHA-3,于2012年完成。与AES竞争的形式成为新的标准之一,后被选定为KECCAK的标准
LSH (Lightweight Secure Hash)2015年韩国提出的国内标准哈希函数,使用 Wide-pipe Merkle Damgaard构造,可以输出224.256.384.512bit的哈希值

哈希函数面临的攻击

  1. 暴力解码:哈希函数不是加密算法,因此这个暴力解码与加密算法中的不同。来看下面一个例子:

由于买卖,A想要给B转账十万元并写下了电子合同。该信息被黑客截获,黑客现在中断了A与B的通信,想要修改金额,将十万元给修改成一亿元。此时,黑客会通过机械来生产大量同义句,如
A给B的支付金额是一亿元
A给B的支付金额是一亿圆
A给B的支付金额是壹亿元
A给B的支付金额是壹亿圆
A给B的支付金额是¥100000000
A给B的支付金额是¥100,000,000

这些句子都是一个意思,然后用这些句子生产的哈希值与原转账十万元比较,直到输出一个与原文相同的哈希值,将二者替换,就能够达成目的了。这也是暴力解码的一种方式。这种方式并不是通过输出去反向算出输入,并没有本质上破解哈希函数,而是破坏了合同本身,其实目的不在于置换的内容如何,只要我用一个随机内容生成了对应相同的哈希值,我就可以破坏AB二人之间的正常交易。

  1. 生日攻击:利用生日问题引申出的攻击手段。先来看生日问题。

除去2.29,N人中有两个人生气相同的个概率是多少?为了让任意两人生日相同的概率大于50%,应该至少有多少人?
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_03
N=23时,这个式子的值为0.507297。因此,只要23个人就可以,是不是比想象中要少得多。

所以生日攻击也是运用这道理。黑客生成N个十万元合同和N个亿元合同,比较这两个合同的哈希值,找到两边有相同的时,将亿元合同代替对应的十万元合同并伪造成A发给B的。这个过程就是生日攻击。N越大则生日攻击越难成功,N越小则生日攻击越容易成功。假定A的单方向哈希函数的位数是M,Mbit的所有二进制数组空间是2M个,N≈ 2 M = 2 M 2 \sqrt{2^M}=2^{\frac{M}{2}} 2M ​=22M​,也就说当N= 2 M 2 2^{\frac{M}{2}} 22M​时,黑客就有50%以上的概率能够成功生日攻击。也就说对于SHA-1,只需要计算机有能力实行 2 80 2^{80} 280次生日攻击,就有50%以上的概率找对对应哈希值,虽然现在计算机力已经能够达到,但在20世纪初期这一度被认为是天文数字。

哈希函数无法解决的问题:虽然哈希函数可以鉴出数据是否被变更,但是无法鉴定该数据本身是否来源不正当,也就说无法鉴别真伪。因此就需要导入认证技术,其中最典型的两项技术是数字签名和MAC。

MAC(Message Authentication Code)

注意这里的MAC不是计算机网络中的MAC地址,而是信息认证码。对于一个加密后的消息,我们通常需要确认两点,第一点是其完整性,信息是否被篡改过;第二段是其出处,来源是否是合法对象,使用认证技术。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_04
MAC:拥有【来自真正发信者】的性质,确定机密性,并对信息来源进行认证的代码。输入是信息和共享的密钥而输出是固定长度是固定的。MAC与哈希函数相似,区别在于哈希函数不需要使用密钥,而MAC需要使用密钥来获取输出。

【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_05
MAC认证过程:A向B事前共享密钥,A用该密钥计算MAC值,然后将该MAC值通过安全途径送达B处。而此后与A交互时,在传输加密消息之前,直接通过明文形式传输这一段固定的信赖信息,该信赖信息由于是一般途径自然可能被篡改或伪造,此时用已经共享的密钥对其进行计算,计算得到的MAC值与从安全渠道获取的MAC值相比较,如果相同则证明来源确实是A没错,否则该信息是伪造的。

那么这里存在一个问题,这个安全的渠道是什么?这就又回到上一篇博文讲过的密钥配送问题了,详细内容请看一下上一篇博文的密钥配送问题。典例有公钥加密、 Diffie-Hellman 、KDC等。


MAC使用的例子:

  1. SWIFT: Society for Worldwide Internet Financial
    Telecommunication,翻译为国际间银行通信协会。银行与银行之间交换交易信息时使用MAC。
  2. Ipsec:为IP协议安全而诞生,通信内容的完整性和认证都使用了MAC。
  3. SSL/TLS:Web 网购时使用的协议,同样使用MAC保证通信内容的完整性和认证。

MAC的实现:

  1. 利用SHA-1&MD5 等单方向哈希函数生成的MAC——HMAC。
  2. 利用块加密技术3DES/AES等生成的MAC。将块加密的密钥当做MAC的密钥使用,用CBC模式加密所有信息,因为在MAC中没有解密的必要,因此最后的加密结果当做MAC值,此外的部分舍弃掉。
  3. 此外还有流加密和公钥加密两种方式可以实现。

认证加密

认证密码,英文简写为AE或AEAD,从2000年开始进行研究,是将对称加密与MAC相结合形成的同时保证机密性、完整性和认证的结构。

  • Encrypt-then-MAC
    【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_06
    IPsec中使用,可以阻止选择密文攻击。将明文通过对称加密加密成密文后,将密文当做输入计算MAC值,然后组合密文与MAC值。选择密文攻击可以用密文生成任意对应的明文,但是由于最终加密结果并不仅仅是密文,因而无法解密出正确的明文。
  • Encrypt-and-MAC
    【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_07
    SSH是使用该方式的典例。使用同一个密钥加密。
  • MAC-then-Encrypt

【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_08
SSL是使用这种方法的典例。先计算MAC值并与明文结合后再加密。

  • GCM(Galois/Counter Mode):是认证模式的一种。将与AES相同的128位块数据利用CTR模式计算MAC值。为此需要使用反复加法和反复乘法的哈希函数。由于CTR模式的特性,可以并发处理数据进而提高整体加密效率,此外CTR和MAC计算使用的是同一个密钥,因此管理便利。
  • GMAC(Galois/Counter Mode MAC):GCM专用的MAC。

HMAC

【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_09

HMAC是利用单方向哈希函数生成的MAC,上图是不同版本HMAC对应使用的哈希函数。根据RFC 2014的定义,HMAC生成公式如下。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_10
生成过程:
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_11

步骤 操作
1 key padding 生成,用0填充密钥到与块加密长度相等的长度
2 经过填充的key与ipad异或运算
3 ②与明文结合
4 计算③哈希值
5 ①密钥与opad异或运算
6 与④得到的哈希值结合
7 计算⑥的哈希值

针对MAC的攻击

  1. 再传送攻击:replay attack。用实现保存的真正的mac值进行反复传输的一种攻击。
    看下面一个例子:
    黑客监听了A与B的通信,A与B都是银行。黑客在AB银行都有自己的账户,黑客在A银行制作一个信赖信息【向B银行的M账户存款10万元】,B银行的M账户也是他自己的账户。A银行将此信赖信息的MAC值计算后,附加到信赖信息内发给B银行,B银行将收到的信息计算MAC值比较两个MAC值,确定是正确无误的信赖信息。而黑客监听该流程从而得到了信赖信息和MAC值,然后,黑客将此组信息重发给B银行,B银行收到后,会验证MAC值,计算出了正确的结果,从而系统上会再给黑客B银行的账户增加十万元额度。由于是系统操作,因此只要使用过一次现金入账,此后就可以无限次重发该消息,令B银行无限次给自己进行“存款”。
    应对策略:
  • 序号(sequence number):为每次发送上述消息组增加一个序号并设置最大序号。该消息组每发一次便计数器+1,如果受到再传送攻击,则会是N个序号为x的消息组,则会被认定为假。
  • 时间戳(timestamp):发送的信息组会记录当前时刻,当受到再传送攻击时,会收到 复数组同一已经过去的时刻发来的信息组。要求收发双方要提前将时钟同步。
  • nonce:nonce是服务器产生的随机数,当客户端第一次发出请求时,获取nonce,将其与原文一起进行加密,进行发送。服务器使用同样的算法进行加密,与客户端发送过来的密文进行对比,若用户名一样则证明消息的有效性。若发现该nonce在数据库中已经存在,则该请求可能为恶意请求。但是随机数本身有可能会重复,因此可以结合上述两点来使用。
  1. 推测攻击:针对MAC本身的攻击有暴力解码和生日攻击。需要使考虑的单方向性、抗碰撞性、密钥生成时的伪随机数生成器等。
  2. 否认(repudiation):虽然收到明文并计算出了对应的MAC,但是无法证明 这一组重组信息是真的来自于合法用户,因为只要有密钥,就能生成对应正确的MAC。如果有多个合法用户持有一个密钥,则不能保证该合法用户不被另一个合法用户恶意攻击。举个例子,ABC三人,A偷了B的东西被C看到了,在此情况下A打死不承认该事件,由于没有证据,因而C的证言不能排除恶意攻击A的可能性,因此无法证明A是真的小偷。因此该弊端需要一项其他技术来解决。
数字签名

否认(repudiation):发信方否定自己发送该信息的事实。

1.邮件本身谁都可以编造,A的借条邮件写了借B多少钱。
2.即便A发了借条给B,但是事后A抵赖,说这个邮件不是他发的,又没有证据能证明这邮件是他发的,则会吃哑巴亏。因为邮箱可以被盗号、电脑可能被其他人使用。
3.使用MAC可以检查出邮件本身是否被篡改内容,但是并不能防止否认。

从而引出的新技术——数字签名。数字签名是通过[鉴证用密钥]和[签名用密钥]两种密钥来实现对数据出处的确认。在利用公钥加密技术的情况下,将个人的私钥当做[签名用密钥]加密某消息,该消息被称作签名。任何接收该信息的人,不管是黑客还是合法用户,收到该签名后,用发信者的公钥尝试解密,公钥是[鉴证用密钥]且谁都可以持有,因此只要能够解密,就说明发信来源毫无疑问是私钥拥有者。这一个签名与鉴证的过程就是数字签名的过程。

- 私钥 公钥
公钥加密 收信人解密用 发信人加密用
数字签名 发信人签名用 收信人鉴证用
持有者 个人私有 可以被任何人持有,一般通过一般途径共享给有需要的用户

就是公钥加密的密钥反转过程。公钥加密技术是任何人都可以使用某人的公钥进行加密,而数字签名是任何人都可以对某签名进行鉴证。

数字签名的特征:

  • 不可伪造(Unforgeable):只有签名者可能生成签名
  • 签名者认证(Authentic):所有人都可以鉴证某签名
  • 不可重复使用(Not Reusable):签名无法被其他明文签名使用
  • 不可篡改(Unalterable):签名后的密文无法被篡改
  • 防止抵赖/否认(Nonrepudiation):签名后签名者不能对其行为否认或抵赖

数字签名需要的条件:

  • 签名需要明文以bit形式存在
  • 为了保证防止伪造和抵赖,发信人要求使用表达唯一信息的比特数据
  • 签名过程尽可能简单
  • 签名的鉴证与辨识尽可能简单
  • 伪造签名要从算术上不可能
  • 在签名保存到存储介质的过程中,签名的副本应该更实用的保存

数字签名过程图解:
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_12


数字签名的实现技术不仅仅局限于公钥,也可以使用其他技术实现,比如单方向哈希函数。下面再简单说明一下哈希函数实现数字签名的例子。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_13

与公钥技术相似的是,为了保证来源的唯一性,仍然使用公钥加密签名,只不过传输的明文多了一步计算哈希值的过程。

应用场景

鉴于数字签名的特性,目的不是为了保证机密性,而是为了对来源的确认。举例生活中的例子往往更容易理解。

  • 党中央下发给地方的政令,这些内容并不是机密,允许以明文的形式上传下达,但是要求该文件中的每一个字和标点符号都不能被更改。此时中央以签名与明文与对应公钥发给地方,地方用公钥进行签名鉴证,确保内容无误。
  • 企业合作,A公司向B公司订购某货物一万吨,每吨售价一万元。合同签订后,B公司开始生产,当两个月后,生产完毕,此时发现该货物市值降低,市场价每吨只要8000元,此时A公司想要以市场价收购货物,而抵赖合同不是它签的。此时B公司拿出其签名,令其无法否认自己的行为,令其按照合同价收购货物。这个过程中,合同可以是纸质合同也可以是电子合同,都需要用签名来防止抵赖。

关于数字签名的常见疑问Q&A

  1. 为什么密文可以当做签名来使用?
    A):这里加密密文不是为了实现机密性,而是为了实现可鉴证性,必须有某种手段能够防止抵赖,而在加密通信中,这种私钥加密的方式就能够满足需求。
  2. 该过程中不需要维持机密性吗?
    A)是的,该过程不需要维持机密性,即任何人都允许被获取这条信息。这是用来鉴证来源的信息,该信息被鉴证后,证明发信者是真正的发信者无误后,再使用公钥加密、对称加密等加密明文的通信手段来交换需要维持机密性的信息。
  3. 签名本身也是比特流,那么就有被复制的可能,如果被复制不会被恶用吗?
    A):确实签名可以被复制和保留。但是即便复制该签名,也无法变更两点——该签名是谁签署的和签名内容是什么。也就说,如果签名者变更了签署内容的明文,则保留的签名将在此次以外的通信中失效。签名的意义在于鉴定发信人是否是对应用户,只要不知道发信人的私钥就无法伪装成对应的用户。因此仅持有签名是无意义的。
  4. 是否能篡改签名?
    A):当然可以,签名与明文都可以被篡改,但是没有意义。因为只要被篡改就会鉴证失败,鉴证人就能发现被篡改的事实。
  5. 是否可以同时修改签名与明文让他们两者能够恰好满足加密与解密关系?
    A):现实角度上不可能。
  6. 签名是否可以被再次利用?
    A)确实可以将签名单独裁剪掉并附加到其他信息中,但是没有意义。因为鉴证内容一旦改变,则签名鉴证将失败。
  7. 如果数字签名被删除,那么签名效果是否就失效了?
    A):不会。只要签名鉴证成功就证明了发信人是真正的发信人。该状态不会改变。即便签名本身被删除 ,在需要的时候可以生成一个文件,对于该文件可以要求对方进行重新签名。
  8. 如何实现防止否认(防止抵赖)?
    A):私钥只有发信人本人持有,如果其对应公钥可以解密某密文,则说明生成该密文使用的密钥一定是其对应的私钥。

活用数字签名的例子:

  • 安全公告Clearsign:不加密消息而是签名消息。利用哈希函数与公钥加密,当要发布某条安全警告时,需要验证信息的真实性,因此网络侵害事故对应资源中心会用哈希函数生成警告的哈希值并进行数字签名,签名结果与警告明文本身一起传输给下级部门。下级部分会将签名解密成哈希值,并计算明文的哈希值,如果二者相同则说明警告来源为真,拉响警报。
  • 软件下载:下载软件时,将软件本身进行签名,下载后再对比网站上的软件与签名解密后的软件的哈希值,来判断黑客是否对其有操作。
  • 公钥认证书:将数字签名附加到公钥上,可以判断由此判断获得的公钥来源是否是真正的拥有者。
  • SSL/TLS:将服务器的公钥进行签名,确定服务器的签名是真正对应服务器的。
  • RSA签名:签名=信息D mod N,(D,N)是签名者的私钥。信息=签名E mod N,(E,N)是签名者的公钥。
  • 其他数字签名: ElGamal、DSA(Digital Signature Algorithm)、 Rabin、Schnorr、 GQ、SIGN 、Fiat Shamir、KCDSA、 ECDSA、EC-KCDSA等不同的公钥加密方法为基础的数字签名。

数字签名面临的攻击

  1. MIMT中间者攻击:是的,数字签名仍然面临该攻击。黑客接入发信人和收信人之间,对发信人伪装成收信人,对收信人伪装成发信人,则对两名合法用户看来,他们数字签名环节都没有任何问题,都可以将签名解密到对应明文,然而实际上是黑客已经操作后的结果。
  2. 对单向哈希函数攻击:如果哈希函数抗碰撞性不够强,则容易被黑客将哈希值相同的消息偷换成其他消息。
  3. 利用数字签名反向解密公钥加密:黑客将A发给B的密文以其他身份发给B,并告诉他这一个密文是一个随机生成数,他正在进行数字签名实验,希望B给他做一份数字签名发给他。然后B对这个随机数(实际上是A个B的密文)进行数字签名,在RSA算法中其实就是对该消息进行解密。
    签名=信息D mod N
    信息=签名E mod N
    对签密文进行数字签名,得到是信息本身。
    (密文)D mod N=(信息E mod N)D mod N=信息。因此不知道意义的数据绝对不要随意进行数字签名。
  4. 潜在风险:即便毫无意义的数据(乱码)只要能生成正确的签名,则签名算法本身就不安全。即便是无意义的数据,也可能通过数字签名鉴证。这就数字签名算法的固有威胁之一。
  5. RSA潜在风险:随机数列S是RSA将M加密后的结果,S是M正确数字签名的逆,因此公钥可以被攻击者计算出,这也是数字签名的潜在威胁之一。
    对策:RSA-PSS(Probabilistic Signature Scheme):不是使用明文加密,而是明文的哈希函数值加密,在通过哈希函数之前,附加填充则会相对更加安全。
  6. 其他攻击:所有针对公钥加密的攻击都大部分都可以针对数字签名,包括对私钥的暴力解码和RSA中N的因数分解等。
- 对称加密 公钥加密
公钥加密 收信人解密用 发信人加密用
数字签名 发信人签名用 收信人鉴证用
密钥配送问题 存在 存在,公钥需要配送
机密性 保证 保证
- 信息认证代码MAC 数字签名
发信人 共享密钥计算MAC值 私钥签名
收信人 共享密钥计算MAC值 公钥鉴证
密钥配送问题 存在 存在,公钥需要配送
完整性 保证 保证
认证 仅可认证通信对象 可认证通信对象以及第三者
防止抵赖 不可以 可以

既然我们了解了数字签名无法确认收信来源真假,但是却可以对通信对象进行包括多个合法用户在内的认证。为了解决入手公钥可能是伪操作的问题,我们需要使用认证书技术。

认证书与认证机关

公钥认证书(public-key certificate; PKC):有认证机关(简称CA)发布的具有信赖意义的公钥,有这个可以被信任的第三者——认证机关数字签名公钥后,可以确认收信来源的唯一真实性。
我们来看一下认证书发布过程:
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_14

  1. Bob生成了一对密钥。公钥和私钥。
  2. Bob向CA登录自身的公钥。
  3. 认证机关用自己的私钥进行数字签名并将签名与Bob的公钥组合,然后发给Alice。
  4. Alice接收该认证书。
  5. Alice使用CA的公钥鉴证签名,并获得Bob的公钥,并确认确实无疑来自于Bob。
  6. Alice使用Bob的公钥加密信息并传给Bob
  7. Bob用自己的私钥解密密文,获得信息

公认认证书分为两类,范用和专用。范用认证书可以在全领域使用,如电子证券、网商、网络购物、网络教育、电子投票等等等,使用时往往伴有小额手续费。而专用认证书用途限定,一般作用于网络银行和保险,专用电子商务,政府组织等机关,这些机关的用户往往是免费使用服务的。

认证书的申请需要提供个人的基础信息,姓名、联系方式等,实名制社会慢慢开始要求提供身份证来解锁高级应用。下图是SSL申请的web认证书之一标识的内容
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_15
X.509标准:

  • 签名前的认证书(数字签名对象的信息)
  • 数字签名算法:对签名前的认证书签名的算法
  • 数字签名本体:签名前认证书的本体

Certificate :
DATA :
Version : 3
SerialNumber : 17: ab:4a:84:7d:6c:15:8e:79:4c:2e:e8:e8:26:7d:23:
Signature Algorithm: md5WithRSAEncryption
Issuer :
O=KECA, Inc., OU=VeriSign Trust Network, OU=Terms of use at https://www.crosscert.com/rpa
©01, CN=CrossCert Class 1 Consumer Individual Subscriber CA,
Validity :
notBefore : Dec 24 00:00:00 2006 UTC
notAfter : Feb 22 23:59:59 2007 UTC
Subject :
O=KECA, Inc., OU=CrossCert Class 1 Consumer Individual Subscriber CA, OU=Terms of use at
www.crosscert.com/rpa ©01, OU=Authenticated by CrossCert, OU=Member, VeriSign Trust
Network, OU=Persona Not Validated, OU=Digital ID Class 1 - Netscape, CN=GilDong Hong,
/Email=gildong@novel.ac.kr
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
e3:08:47:05:ea:69:6c:ef:d9:8c:59:a0:79:fc:4a:84:a5:44:91:3b:
92:4c:1c:09:4e:e6:c6:fb:88:67:42:3e:bb:fe:75:75:b9:38:97:35:
dc:6b:20:ca:07:2d:71:fa:fa:d5:18:51:f4:f7:b5:a0:87:17:1e:08:
3a:cb:be:23:f8:16:3d:a9:33:19:53:38:45:b7:e4:8a:31:65:5b:26:
ac:d0:6a:46:c3:50:2d:b4:b2:bc:e0:16:fc:23:1d:39:8b:bd:93:0e:
c1:ac:40:10:3f:e2:e8:4e:6e:20:88:6c: ab:24:b9:c5:5b:b1:fb:3f:
9a:10:46:0f:a1:57:9b:23:
Exponent:
00:01:00:01:
X509v3 extensions:
x509 Basic Constraints:
CA:FALSE
PathLenConstraint:NULL
x509 CRL Distribution Points:
[0] dist-point :
[0] fullName :
[6]
http://onsitecrl.crosscert.com/KECAIncCrossCertClass1ConsumerIndividualSubscriberCA/LatestC
RL
x509 Certificate Policies:
policyID = 2.16.840.1.113733.1.7.1.1
qualifierID = pkix-id-qt CPSurl
qualifier = https://www.verisign.com/CPS
qualifierID = pkix-id-qt UserNotice
qualifier :
organization : VeriSign, Inc.
noticeNumbers : 1,
explicitText : VeriSign’s CPS incorp. by reference liab. ltd. ©97 VeriSign
Netscape Cert Type:
SSL client, (0x80)
2.16.840.1.113733.1.6.9:
01:01:ff:
Signature Algorithm: md5WithRSAEncryption
68:90:36:be:d8:16:c5:74:fc:52:c7:5e:b0:43:6e:03:25:9a:
e6:5e:6c:cb:dc:c1:11:c0:2a:70????????ba:12:28:80:fa:9b:fa:
20:7f:e7:47:f6:11:21:a1:e6:d9:2a:3e:c4:8b:83:ce:d9:e4:
77:39:c1:61:0f:e5:4f:27:22:c1:ca:f5:29:73:8d:f0:58:48:
0e:75:28:0f:f6:9e:10:76:ca:8d:8d:09:04:84:fd:a6:38:5e:
a9:f7:56:2d:fb:a8:23:dc:a4:45:58:bc:54:1b:17:67:c6:da:
8a:6b:ae:0e:71:db:7e:20:45:58:0c:67:97????????00:8c:fb:51:
e0:04:
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_16

目前最广泛的使用中,– ITU(International Telecommunication Union)和 ISO(International Organization for Standardization)规定的标准,支持众多APP。

PKI(public-key infrastructure)

公钥基础设施PKI。有三个构成要素,分别是PKI使用者、CA、存储场所(保管认证书的数据库)
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_17
使用者:已经登录到CA和想要将自己的公钥登录到CA的人都是PKI 的使用者。使用者需要做的事有:生成密钥对、登录公钥到CA、从认证机关获得认证书、必要时可以向CA申请将自己的公钥无效化或注销、对信息数字签名和对密文解密。
CA:认证机关。有管理认证书、创建合法用户、公钥登录时验证本人信息、发行认证书和注销认证书的功能。PKCS #12(Personal Information Exchange Syntax Standard)
定义了 注册方法,根据CPS(certification practice statement)对用户进行认证。最上位的认证机关被称为RootCA,由于其权威性可以进行自我签名(self-signature),使用自己的私钥签名自己的公钥,上级CA有下级CA的公钥数据库。认证机关可以小范围注册,适用于一个企业的组织阶层,各部门之间可以相互认证。
RA; (registration authority):登录机关。是CA的一种。用于登录用户的公钥到数据库,对用户身份进行认证和辨伪。
存储场所(repository):保存认证书的场所。是认证书的字典,其他人需要入手公钥时,可以使用此数据库。

CRL( certificate revocation list):当出现认证书废弃的情况,如私钥被窃或丢失时,需要 生成一个CRL,认证机关需要不定期遍历CRL并确保认证书的有效性。

认证书面临的攻击

  1. 公钥登录以前攻击:在公钥登录阶段,黑客截获并中断Bob的公钥传输,转而用自己的公钥代替Bob传输,此后CA将记录黑客的公钥,然后Alice与Bob通信时由于使用黑客的公钥,Bob无法解密而黑客可以对明文信息一览无余。
  2. 相似攻击:用户Bob,可以有B0b,BOB,b0B等多种情况。尤其是英文字母中的O,大写i和小写L有极高的相似度。利用这一点,黑客可以伪造一个非法用户名,使用自己的公钥登录,并效仿合法用户的行动去欺骗另一个用户。
正确拼写 高仿拼写
Alice AIice(用大写i替换了小写L)
BOB B0B(零替换了大写O)

如果字母再一多起来,你会发现可能一不注意就无法正确识别这些信息,从而使这种攻击手段成为可能。
黑客用过 A I i c e AIice AIice注册,并效仿 A l i c e Alice Alice给Bob发信,Bob不注意就会把它当成真的Alice,从而使用黑客的密钥对传输文件。

  1. CA私钥盗窃攻击:将CA的私钥窃取,则CA形同虚设,黑客可以任意篡改、编写、新建认证书。
  2. 攻击者成为CA的攻击:对任何用户可以进行欺诈,所有认证书可以随意创建。
  3. CRL弱点攻击:黑客在用户申请废弃登录的命令到达CRL之前尝试快速攻击。 由于此时的黑客用于对应用户的私钥,可以轻易伪造签名。

A借B转账壹佰万元,此时A向CA发送了自己的签名,然后此时CA说他的私钥被窃取了,会将A的密钥信息转移到CRL。如果A在注销信息到达CRL之前就转账了,然后B提出了这个钱并私吞。然后A收到CRL的返回消息,向B抗议,但是B说它的私钥被偷了,这样B就私吞了钱。

  1. Superfish:2015年联想发生的重大事件。电脑上自由安装的名为Superfish的插件引起安全上的问题
  • 窃取通信,收集个人信息,发布用户互联网使用量身定制广告的软件
  • 在浏览器插入Web网站和Web浏览器后,将访问Web网站的认证书换掉,提示到Web浏览器上。
  • 典型的中间人攻击勒索通信

认证书的必要性

Q)从认证机关获得公钥,和直接从当事人那获得公钥不是相同的吗?有必要这样多此一举吗?
A)从非信赖途径获得的公钥(比如email),很有可能受到中间人攻击。而使用认证机关,则会大大减少受到中间人攻击的概率。如果信任认证机关的本人确认信任,对于可信赖的认证机构持有的公钥发行的认证书获得的公钥也是可以信赖的。如果有其他安全途径,则可以不使用CA。

Q)难道不是自己设计或想出的认证方法才是最安全的吗?
A)先人智慧的结晶绝不会是一般人自己可以超越的,经过长时间的沉淀产生了如此多的技术和应对策略,自己往往不能考虑这么全面,且很多认证没有权限。自己发布的认证方法一般被称为(security by obscurity)。

Q)如何选择值得信赖的CA?
A)一般选择已经成立的公认认证机关,满足公认认证制度。

密钥

key是密码学与信息安全中最重要的组成部分之一。那么具体的说,key到底是什么呢?

  • 密钥是一个非常大的数,密钥除了本身数值很大之外,更重要的是密钥空间也非常大。密钥空间的大小由密钥比特的长度决定。

在不同加密技术中,密钥的长度也大抵不同。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_18

- 表现
二进制 01010001 11101100 01001011 00010010 00111101 01000010 00000011
16进制 51 EC 4B 12 3D 42 03
十进制 23059280286269955
1024bit十六进制 【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_19
  • 密钥与明文具有相同的价值。对于黑客而言,拿到密钥与拿到明文无差异。
  • 加密算法本身并不一定要保密,因为很多加密算法具有强单方向性,应当使用被鉴证后的加密技术,通过把密钥保存作为保密手段来维持密码机密性。
  • Session key:临时密钥。每次通讯时生成新的,使用完毕后销毁并不再出现该密钥,由于生成随机数大多由软件完成,而软件又不能生成真正的随机数,伪随机数生成器只能通过算法保证在较长时间内不重复,但是必然有一个时刻会进入一个循环。
  • master key:反复使用的密钥,也就是一般需要我们妥善保管的密钥。
  • CEK(contents encrypting key):用于加密明文的密钥。
  • KEK(key encrypting key):用于加密密钥的密钥,如KDC和CA中的可信赖公钥配送。
  •  
密钥的阶段 解析
生成阶段 使用(伪)随机数生成器生成。硬件生成的随机数是真随机数,软件生成的随机数是伪随机数。使用的伪随机数生成器也要有[不可预测性],必须使用被认证过的加密用随机数生成器,像C/Java编译器自带的随机函数是不可取的,那些函数使用了非常简单的矩阵随机,在密码学领域应用强度不够。
生成阶段2 一般需要使用password或passphrase生成,把这些较长且复杂的只有自己知道意义的明文通过单方向哈希函数,用他们的哈希值当做密钥。之前提到的PBE就是这里的一种变式,通过附加salt并计算哈希值来当做密钥。
配送阶段 事前共享、KDC、公钥加密、Diffie-Hellman
更新阶段 一般密钥使用一段时间或者频度后,需要进行更新。最简单的密钥更新就是将当前密钥通过哈希函数,生成的哈希值作为下一个密钥使用。这样即便密钥泄露,也能防止过去的信息被解密。
保存阶段 ①记住密钥②保存到文件/记事本,并将文件保存到安全场所(保险箱之类的)③加密密钥后再保存 .etc
KEK KEK可以保存多个CEK【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_20
废弃阶段 不再使用的密钥要切实删除。如果密钥遗失或被盗窃,则要发出废弃密钥的申请。

Diffie-Hellman 密钥交换

Ipsec现在也在使用该算法的改良版本。之前提到密钥配送问题时,简单的提了一下,这里讲一下具体流程。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_21

  1. Alice传送给Bob两个素数P和G。
  2. Alice生成一个随机数A。
  3. Bob生成一个随机数B。
  4. Alice计算GA mod P;Bob计算 GB mod P,然后二者互换这两个数。
  5. KeyAlice= (GB mod P)^A mod P= GB×A mod P
  6. KeyBob= (GA mod P)^B mod P= GA×B mod P
  7. KeyAlice=KeyBob,使用对称加密开始会话。

在上面这个流程中,可能被窃听的有两个素数G和P,以及两者的计算结果,分别是GB mod P和GA mod P。知道这四个数,要求GA×B mod P是数学上的难解问题。该算法由于难解性,比较安全,要求P尽可能大,这样两方可以选择的伪随机数也会更加随机。

实战演练 Alice Bob
1 传输P=13和G=2两个随机数 接收P和G两个随机数
2 A=9 B=7
3 GA mod P=219 mod 13=5 GB mod P=27 mod 13=11
4 将5这个数给Bob 将11这个数给Alice
5 (GB mod P)A mod P=119 mod 13=8 -
6 - (GA mod P)B mod P=57 mod 13=8
7 KeyAlice=KeyBob KeyAlice=KeyBob

PBE(password based encryption)

PBE加密之前也简单提过,其核心在于赋予password后面的填充随机数salt。因此PBE可以简单概括为三个阶段,分别是KEK生成/Session key生成/加密明文。


【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_22

  • KEK生成:使用伪随机数生成器生成salt,salt是一个随机数填充。将salt和人为创造的password按顺序结合并通过单方向哈希函数,该哈希值就作为KEK使用。
  • Session key生成:使用伪随机数生成器生成一个随机数,当做临时密钥,该密钥用KEK加密后与salt一同保存到安全场所。在临时密钥加密完成后,将对应的KEK销毁。只要有password和salt就可以再次生成相同的密钥,因此解密问题无忧。
  • 加密明文:用临时密钥加密明文。

解密过程:从安全场所取得Session keyCEK和salt。将salt和password按顺序组合并通过哈希函数计算出KEK,用KEK解密Session keyCEK得到Session key,然后解密密文。

  • salt的重要性:任何意识载体都存在一定固有的格式,人、语言、定理都是,人必然会受到环境文化生活等诸多方面的影响,那么本身推测password就成为了可能,再利用现在强大的数据分析工具,能够在事前准备大量的password候补,如果不使用salt,则这些password的候补就有极大可能直接破译加密系统。而使用salt后,仅仅拥有password候补就很不充分了,因为salt的组合会对应的生成相当巨大的KEK空间,会大幅增加黑客的操作难度。
  • password的重要性:人脑不足以记忆电脑破解不出来的bit位数的密码,而随机数生成的salt相比生成的session key安全性能要差很多,也就说KEK本身比CEK的安全性要查很多。举个例子就想把坚实的金库保管到脆弱的金库中。CEK一般会保存的IC card中。
  • PBE改善:将salt和password的组合通过N遍哈希函数。提升其混乱程度。
  • password准则:一个password的不要应用多个场景。根据信息价值可以分多层次安全性的password。更换密码时,只更换密码中的一小部分是不可以的。等。但是由于日常生活中人们越来越嫌麻烦,因此如果想要使用安全密码,建议使用伪随机数生成器生成并保存到安全场所。
随机数

之前涉及到的所有知识点基本上都有一个词——随机。没错,一个密码越随机越无序,则越安全。本小节将对随机数进行详细说明。

-
密钥生成
密钥对生成
块加密模式中的初始化向量IV
为了防止再传送攻击而添加的nonce
salt
padding

随机数的用途:无论多强力的加密算法,只要攻击者知道就丧失了意义,使用随机数制作的密钥,对于攻击者而言是为了起到一定的迷惑作用。如,我用IloveyouForever当做密码,与sa53gf4a3w4t3asd4gz.d4g8W4r383a7r4当做密码,前者一看就能够相信这是明文,而后者则可能还是密文。

随机数的性质:

  • 随机性:统计上没有偏重,完全混乱无序
  • 不可预测性:根据之前的随机数无法推断出即将生成的随机数
  • 不可再现性:已经出现的随机数不会从该随机数生成器中第二次出现,想要再现该随机数,除了在生成时保存该随机数别无他法。
  • 随 机 性 ⊆ 不 可 预 测 性 ⊆ 不 可 再 现 性 随机性\subseteq不可预测性\subseteq不可再现性 随机性⊆不可预测性⊆不可再现性
  • 周期性:伪随机数生成器生成的随机数,总有一个时间点会进入重复的下一个循环,只要有周期性,就不是真随机数,不具有不可再现性。
- 随机性 不可预测性 不可再现性 备注
弱伪随机数生成器 × × 不可用于加密技术
强伪随机数生成器 × 可用于加密技术
真随机数生成器 可用于加密技术

真随机数

真随机数生成必须使用硬件,仅仅软件绝不可能生成真随机数。由于受制于硬件,因此随机数的生成也受环境因素影响。如

  • 周边温度与声音大小
  • 用户鼠标的位置
  • 键盘键入时间
  • 放射线观测的输出
  • 等多种物理环境信息

伪随机数

软件生成,成本相对低廉,有周期性不具备不可再现性。核心是种子SEED。种子直接影响伪随机数生成器(PRNG)的内部状态。
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_23

内部状态:

  • PRNG管理的内存值。
  • PRNG的第一个随机数以其内存值为基础进行计算
  • 根据下一个随机数的要求,自身的内部状态也会随之变化。
  • PRNG的算法有两个功能,一个是生成随机数,一个是改变PRNG的内部状态。

【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_24

  • 种子:本身要保密。是PRNG初始化内部状态的必备元素,本身是一个随机数。

PRNG标准:

  • 长周期:周期短则PRNG本身安全性弱,就不具备不可预测性。
  • 简洁算法:比起复杂的算法,明确的算法要更容易评估安全性。程序设计者本身都不能理解的算法生成的随机数很难说安全性如何。
  • 线性合同法(linear congruential method):一般最常用的PRNG,尤其是各种编译器。是将现随机数值的-A+C然后除以M,生成下一个随机数。
生成步骤 过程
1 R0=(A×Seed+C) mod N
2 R1=(A×R0+C) mod M
i Ri=(A×Ri-1+C) mod M

【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_25
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_26
4, 5, 1, 3, 2, 6, 4, 5, 1, 3, 2, 6, …这种情况下,4, 5, 1, 3, 2, 6这六个数为一个循环,进行无限循环下去。

线性合同法短处:无预测不可能性。不可用于密码应用技术中。C 函数的 rand和Java的 java.util.Random 类都是使用的该算法。因此生成随机数绝对不可以使用编译器自带的随机数方法。

  • 单方向哈希函数:也可以当做PRNG。
    【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_27
随机数
使用种子重置计数器
使用单向哈希函数将计数器输出为哈希值
这个哈希值被当做随机数
计数器值+1
根据需要重复2~4过程

另一种错误的形式:
【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_28

随机数
使用种子重置计数器
使用单向哈希函数将计数器输出为哈希值
这个哈希值被当做随机数
将这个哈希值作为下一个内部状态
根据需要重复2~4过程

为什么是错误的?
因为用前者经过计算得到后者,前者与后者是有关联的,虽然有单方向性,但是却也有着明确的个关联性。不具备不可预测性。

  • 加密实现PRNG:
    【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_29
随机数
使用种子重置计数器
加密计数器
这个密文被当做随机数
计数器值+1
根据需要重复2~4过程

【信息保护论】信息保护面临的风险与对应的安全策略_信息保护论_30

ANSI X9.17标准 步骤
重置内部状态 1
加密当前时刻 2
内部状态XOR②密文 3
加密③的结果 4
将④作为随机数输出 5
④的输出XOR现在时刻的密文 6
加密⑥的结果 7
将⑦的结果当做下一轮的内部状态 8
根据需要重复步骤②~⑧ 9

⑥和②的现在时刻是相同的时刻。

对PRNG的攻击

  1. 对种子seed的攻击:可以说对于PRNG,seed就是key的作用,只要种子被窃取,则意味着这一个PRNG生成的所有伪随机数都被窃取。真随机数生成器没有这个问题。
  2. 随机池攻击:PRNG当合法用户需要使用时,会分配对应需求量的随机数,然后这些随机数会被记录到一个类似日志的文件中,称为随机池。这个随机池由于存储了所有可能出现过的伪随机数的出现顺序,即便这个池本身没有什么价值,但是因为存储到里面的伪随机数终有一天会重复,所以这个文件如果被攻击者窃取,则可以对RPNG进行进一步推测。