怎样学习密码学?

怎样学习密码学?

· json · rss
Subscribe:

About

密码工程有很多部分组成,例如密钥管理,密钥生成,密钥分配,密钥协商等等一系列知识,本文主要涉及到各个知识点和关键词,更多细节请百度查询。我将从密钥生成讲起:

1.密钥生成

密钥本质是一串二进制流,生成的过程应当尽可能地符合随机数原则,因此本部分等价于随机数生成。

随机数生成有两种,真随机数和伪随机数。

真随机数是从大自然中采样而来,具有不可预测性。采样中要注意采样频率的大小,过大的时候根据采样定理知道达到最大频率的两倍时候就可以被完全复原。因此为了保证安全性,要尽可能的小。

来源有芯片的热噪声,量子发生器等等。

同时·注意要保证噪声的均匀性,例如有一个收集声音的监听器,超过50分贝为1,否则为0.那么应当要保证有50%的概率是大于50分贝的。

伪随机数主要有3种来源方式:线性同余法(常用于语言中的默认随机数生成器),基于对称密码(类hash),基于困难问题.

线性同余法为 x_{i+1}=cx_{i}+d \;mod\;n .其中n越大,c越大,安全性越好。

例如我们常说的c语言的种子(seed)就是设置了 x_i  的值。为了更高的安全性,我们往往还会使用时间作为种子。

同时它也有一些缺点,只需要4个随机数就可以破解全部参数,亦或者知道编程语言后(等价于知道全部不变参数),需要一个参数就知道下一个数字。

因此有着一些变种函数例如 x_{i+1}=x_i^c\;mod\;n\\x_{i+1}=c^{x_i}\;mod\;n

基于对称密码本质是一种特殊的hash函数, R_{i+1},w_{i+1}=hash(t_{i},w_{i}) .t是时间变量,w0应当是一个被严格保密的初始种子。

基于困难问题暂不表。关键词(BBS,rabin生成器)。

2.密钥检验

密钥检验就是随机性检验,事实上在衡量密码算法或者hash算法的时候也会用的一系列数学方法。

包含了01分布统计检验,m长度下的分布统计检验(01检验就相当于m=1),邻对分布检验等等。

本质是生成不同的统计样本来统计,尽可能地分析相关性。

相关阅读nist随机数检验

3.密钥协商

密钥协商有两种:对称密钥协商技术,非对称密钥协商技术。同时又区分是否有中心平台。

3.1对称密钥协商技术

当无初始密钥的时候是无法利用对称密钥做到密钥协商的。(这也是DH协议诞生的历史背景)。

但当两方已经存在内置密钥的时候,建立会话密钥的工程同样也很重要。

一步协议

A\rightarrow B: E_{K_{AB}}(KS||t_A*||B*)

其中带*是可选项。

T是时间戳,可以有效的避免重放攻击。

两步协议

A\rightarrow B:N_A\\ B\rightarrow A:E_{K_AB}(K_S||N_A||ID_B)

两步协议保证了B的确收到了A发来的信息。

但是不能保证A收到了B的消息。

因此我们引入三步协议

A\rightarrow B:request|N_1\\ B\rightarrow A:E_{K_{AB}}(K_s|requset|ID_b|f(N_1)|N_2)\\ A\rightarrow B:E_{k_s}(f_{N_2})

shair密钥协商协议(类公钥)

\\A\rightarrow B:g^{a}

waiting