关于密码学的几个基本概念

现代密码学

1949年,Shannon(香农)发表《保密系统的通信理论》标志着现代密码学的真正开始。
1976年,Diffie 和 Hellman 发表《密码学的新方向》,标志着公钥密码体制的诞生。
1978年,Rivest、Shamir 和 Adleman 提出了 RSA 公钥密码体制。

密码学的 CIA 目标

  • 机密性(Confidentiality):确保数据在存储或传输中保持秘密状态
  • 完整性(Integrity):保证数据在传输中不被篡改
  • 不可否认性(Availability):为接收者提供担保,保证消息确实来自发送者而不是来自伪装者

有的理论还补充了一些目标,例如:

  • 身份认证(Authentication):对声明的系统用户进行身份验证

A军给B军发送了一封加密的文件,只有B军通过密码本能看懂,这体现了机密性;
C军截获这封文件并篡改后发给B军,但是B军通过文件袋的印刷痕迹可以看出这个文件已经被篡改,这体现了完整性;
B军通过文件的印章可以看出这是A军写的,而不是C军伪造的,体现了身份验证。

密码学家的六大工具箱

  • 对称密码(Cipher):
  • 公钥密码(public-key cryptography):
  • 单向散列函数(Hash):
  • 消息认证码(MAC):
  • 数字签名(digital signature):
  • 伪随机数生成器(PRNG,Pseudo-Random Number Generators):

黄金法则

黄金法则主要包含三部分:认证(Authentication)、授权(Authorization)、审计(Audit)。

认证:可信的身份认证是建立安全保障体系的第一步
授权:当用户被认证后,确定该用户有那些操作的权限
审计与问责:当在授权完成后,安全需要检查一下“你做了什么”,记录行为日志,这个检查的过程就是审计;当发现做了某些异常操作时,安全还会提供你做了这些操作的“证据”,让你无法抵赖,这个过程就是问责

Cipher & Encrypt

在密码学(cryptographic)里面,encrypt & decrpty 就是加密和解密,但也经常见到 cipher,而且“密码”的中文表述就更加混乱了,cipher、password、passphrase 都可以被翻译成”密码”,分析其英文单词来源:

  • cipher:=cypher(名词,暗号),后来被衍生为动词:把(消息)写成密码,也就是加密。
    decipher:由 cipher 衍生的反义词,即:动词,解密。
    进一步,明文被称为 plaintext,对应的密文则是 ciphertext
  • password: 一般是用户设置的各种字符或者数字密码,也称作口令。
  • passphrase: n. 密码;通行码;口令短语。也称为”密碼片语“,通常是指用于保护密钥或者其他敏感数据的一个 password

Key encapsulation Vs Key wrapping

主要区别在于使用的是对称加密算法、还是非对称加密算法:

  • 密钥封装(Key encapsulation):指使用非对称密码算法的公钥加密另一个密钥。
  • 密钥包裹(Key wrapping):指使用对称密码算法加密另一个密钥。

密码攻击方式

在密码分析学中,有四大攻击方式:

  • 唯密文攻击:唯密文攻击是假定密码分析者拥有密码算法及明文统计特性,并截获一个或多个用同一密钥加密的密文,通过对这些密文进行分析求出明文或密钥。 在实施唯密文攻击时,只有充分掌握和利用明文信息如文字、图像、语音、计算机程序等的内在规律,才有可能根据截获的密文成功破译密码。唯密文攻击已知条件最少。经不起唯密文攻击的密码被认为是 不安全的。你可以理解为:已知密文的穷举攻击,也仅知道密文
  • 已知明文攻击:已知明文攻击指攻击者掌握了某段明文x和对应密文y。 希尔密码依赖唯密文攻击较难破解,而通过已知明文攻击则容易攻破。你可以理解为:已知部分明文及其对应的密文,进行分析破解
  • 选择明文攻击:选择明文攻击指的是一种攻击模式。攻击者拥有加密机的访问权限,可构造任意明文所对应的密文。在选择明文攻击时,密码分析者对明文有选择或控制的能力,可选择他认为有利于攻击的任何明文及其对应的密文,是一种比已知明文攻击更强的攻击方式。如果一个密码系统能够抵抗选择明文攻击,那么必然能够抵抗唯密文攻击和已知明文攻击。你可以理解为:知道明文就知道密文
  • 选择密文攻击:攻击者掌握对解密机的访问权限,可以选择密文进行解密。密码分析者对密文有选择或控制的能力,可选择他认为有利于攻击的任何密文及其对应的明文,是一种比已知明文攻击更强的攻击方式。如果一个密码系统能够抵抗选择密文攻击,那么必然能够抵抗唯密文攻击和已知明文攻击。选择密文攻击主要用于分析公钥密码体制,如针对RSA公钥密码体制的选择密文攻击。你可以理解为:知道密文就会知道明文

两个常用动词:

加密:cipher 或者 encrypt
解密:decipher 或者 decrypt
另外有几个名词有必要解释:

cipher: 指用于加解密的「密码算法」,有时也被直接翻译成「密码」
cryptographic algorithm: 密码学算法,泛指密码学相关的各类算法
ciphertext: 密文,即加密后的信息。对应的词是明文 plaintext
password: 这个应该不需要解释,就是我们日常用的各种字符或者数字密码,也可称作口令。
passphrase: 翻译成「密码词组」或者「密碼片語」,通常指用于保护密钥或者其他敏感数据的一个 password
如果你用 ssh/gpg/openssl 等工具生成或使用过密钥,应该对它不陌生。
在密码学里面,最容易搞混的词估计就是「密码」了,cipher/password/passphrase 都可以被翻译成「密码」,需要注意下其中区别。


经典文献