一次一密密码简介
一次一密密码(one-time pad)最早是由Major Joseph Mauborgne和AT&T公司的Gilbert Vernam在1917年发明的。原理简单,使用便捷,其安全原理是基于信息传递,双方的密钥是随机变化的,每次通讯双方传递的明文都使用同一条临时随机密钥和对称算法进行加密后方可在线路上传递。因为密钥一次一变,且无法猜测,这就保证了线路传递数据的绝对安全。即使拥有再大的破解计算能力,在没有密钥的前提下对线路截取的密文也是无能为力的。
这套方案在当时的背景下,还是比较完美的解决了线路数据传递的安全问题。但也同样存在着不可忽略的问题,即通讯双方密钥同步问题。这点很好理解,早先的一次一密密码的实现,需要通讯双方保存一个相同的密码集,每个密码集中拥有N条随机密钥,每次通讯顺序使用其中的密钥。但双方的密码集中相同序号的密钥必须是完全一样的,否则密文无法被正确还原。所以一旦其中一个密码集泄露,那这套加密系统自然就被破解了。这就导致密码集的维护成本极高,且存在安全风险。
时至今日,基于对称加密算法实现的安全方案,不论加密算法自身的安全强度多高,但最核心安全的依然是密钥安全存储与使用,一次一密密码技术在现今使用的非常广泛。不论是银联加密系统,还是远程视频加密等应用都会涉及到。这其中的关键技术就是密钥的下发与安全存储和销毁。下发过程是多种多样的,但多数使用了密文方式进行密钥更新。
下面简述一种应用方法。A、B双方在已建立互信机制的前提下,分别应用LKT硬件加密芯片存储一条线路保护密钥KEY_pro。每次通讯之前,A利用加密芯片产生N字节随机数作为数据加密密钥KEY_en并存储于RAM之中,在加密芯片内部经KEY_pro加密后生成密文C1,A将C1发送给B后,经加密芯片内部的KEY_pro解密还原出KEY_en并存储于加密芯片RAM中。每次A、B双方正式通讯前,都经过上述操作完成密钥同步,然后利用KEY_en对通讯数据加密传递,这就实现了一次一密码的安全方案,同时解决了密钥存储维护的难题。之所以这样说,是因为加密芯片自身具有高安全等级,可有效防止暴力破解等数据破解方式,保证内部数据存储与运行安全。线路传递数据的加解密都在芯片内部完成,保证线路安全。最主要的是加密算法可灵活选择,利用LKT加密芯片的可编程特点,能够自由切换加密密钥和加密算法,让一次一密,一次多密或者多次多密的应用都变成可能,打开了嵌入式应用开发人员的思维模式,让安全变得更贴近应用。
参考文献:
Applied Cryptography protocols,Algorithms,and Source Code in C Second Edition(美)Brucc Schncic著 吴世忠 祝世雄 张文政 等译(11-12)
相关文章
- 7.用户登陆,用户退出,记住用户名和密码
- 如何获取大数据平台 CDH 中 hive metastore db 的用户名和密码?
- 为什么mysql设置了密码之后,本地还可以直接访问,不需要输入密码就可以登录数据库了?
- Centos7修改root密码
- 安装mysql时出现应用程序无法正常启动(0xc000007b)、初始化失败以及密码忘记怎样重置?
- 通过网页修改AD密码 AD用户密码
- shell脚本中如何使scp不输入密码即可传输文件
- MVC扩展Filter,通过继承ActionFilterAttribute为登录密码加密
- 掌握财富密码,运维还要了解这些技术
- git clone 使用用户名和密码
- 基于C++实现(控制台)微软 CryptoAPI 的密码系统【100010238】
- centos限制远程尝试密码次数
- Maven-007-Nexus 用户添加,用户角色分配,用户修改密码,管理员重置用户密码
- 忘记UCENTER创始人密码的解决办法
- 本地oracle数据库忘记用户名密码解决方案
- 手机电脑密码的制作