一次性密码本查看源代码讨论查看历史
一次性密码本(one-time pad,缩写为OTP)是古典密码学[1] 中的一种加密演算法。是以随机的密钥(key)组成明文,且只使用一次。
加密方法
首先手上要有一本一次性密码本用以加密文件,接著将一次性密码本里的字母,与被加密文件的字母给依序按某个事先约定的规定一一相混,其中一个相混的作法是将字母指定数字(如在英语中,将A至Z依序指定为0至25)然后将一次性密码文本上的字母所代表的数字和被加密文件上相对应的数字给相加,再除以该语言的字母数后取得其馀数,假设字母数是 n(如英语为26),若就此得出来的某个数字小于零,则将该小于零的数给加上n,如此便完成加密。
举个例子,若要加密讯息“This is an example”,而用以加密的一次性密码本如下所示:
MASKL NSFLD FKJPQ
则利用指定数字的方法,可分别将两者给做以下的转换:
- This is an example → 19 7 8 18 8 18 0 13 4 23 0 12 15 11 4
- MASKL NSFLD FKJPQ → 12 0 18 10 11 13 18 5 11 3 5 10 9 15 16
两者依序相加后得到的讯息如下:
- 31 7 26 28 19 31 18 18 15 26 5 22 24 26 20
将以上得到的讯息模26(除以26后取馀数)可得:
- 5 7 0 2 19 5 18 18 15 0 5 22 24 0 20
它也就变成了
- FHACTFSSPAFWYAU
而若要解密以上讯息,反向操作即可。
安全性
在理论上,此种密码具有完善保密性,是牢不可破的。它的安全性已由克劳德·艾尔伍德·香农所证明。
虽然它在理论上的安全性无庸置疑,但在实际操作上却有著以下的问题:
- 用以加密的文本,也就是一次性密码本,必须确实是随机产生的。
- 它至少必须和被加密的文件等长。
- 用以加密的文本只能用一次,且必须对非关系人小心保密,不再使用时,用以加密的文本应当要销毁,以防重复使用。