上一篇文章【密码学】四大主题简单介绍 一文提到要实现信息传输的保密性、完整性,以及身份鉴别和抗抵赖,使用的技术手段有:
1) 密码技术(加密与解密)。
2) 哈希技术,即散列技术。
3) 随机数。
4) 时间戳。
下面先讨论密码技术。
下图是一个典型的密码系统,展示了密码技术的应用场景:
明文:P 密文:C 加密密钥:K1 解密密钥:K2 加密方法:E 解密方法:D
加密与解密的关系可以用公式简洁地表示:
C = EK1(P) 表示用加密密钥K1通过加密方法E对明文P进行加密得到密文C。
P = DK2(C) 表示用解密密钥K2通过解密方法D对密文C进行解密得到明文P。
DK2(EK1(P)) = P 由上面两个式子可以得到这个式子。
由此可见,实际上,密码算法E和D都是数学函数。
关于密码学,有两个基本原则:
1) 消息必须包含一定的冗余度。
2) 必须采取措施对抗重放攻击。
另外,关于密码系统的设计,还有一个原则叫做Kerckhoff原则:
“密码算法必须公开,只有密钥需要保密。”
这个原则体现了一个思想:让入侵者知道密码算法没有关系,所有的秘密都隐藏在密钥中。对密码算法保密是不明智的,因为密码算法的设计很困难,一旦算法原理泄露了,必须得花费大量精力重新设计。但密钥可以随时更换。
每个密码算法,都有其数学背景,依赖某一种数学理论。下面是一些常见密码算法的数学理论依据:
1) 信息论
由香农(Claude Elmwood Shannon)于1948年创立的现代信息论为安全的密码系统定义了一个精确的数学模型。
2) 复杂性理论
复杂性理论提供了分析密码算法的“计算复杂性”的方法。它通过对密码算法进行比较,来确定一个密码算法的安全性。密码算法的“计算复杂性”通常用时间复杂度和空间复杂度两个变量来度量。
3) 数论
数论中的模运算、素数、最大公因子、求模逆元、费尔马定理、中国剩余定理、迦罗瓦域理论等等,是很多密码学算法的数学基础。
4) 因子分解
对一个数进行因子分解就是找出它的素数因子。因子分解是数论中最古老的问题,分解一个数很简单,却是一个耗时的过程。一些经典的因子分解算法有:数域筛选法、二次筛选法、椭圆曲线法等。
5) 计算有限域中的离散对数
计算离散对数是数学中公认的难题。计算离散对数与因子分解有紧密关系,如果能解决离散对数问题,就能解决因子分解问题。