密码算法(一)

2021/12/2 11:06:42

本文主要是介绍密码算法(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、密码算法的安全原理
信息熵是消息中包含信息的平均量。
 

现代密码算法的安全基础都是计算复杂性问题。如果攻击者拥有无限的计算力,则这种方案会泄露信息。
但是如果假设攻击者的计算能力有限,那么攻击者计算出秘密信息的概率非常低以至于可以忽略不计,那么这种算法性能更好,更加实际。

Kerckhoff原则:密码算法必须可以公开
核心假设:没有什么信息是可以完全保密的
如果密码算法可公开,那么就可以重用。一旦秘钥泄露,只需要更换一个短秘钥即可,不需要重新开发整套系统,可以在收到攻击后实现低成本快速恢复系统的安全性。

二、密码算法的特点
对称密码主要是专用的设计
优势:性能高   劣势:单独设计代价高,无法证明安全性

非对称密码主要是基于数学困难问题
优势:算法安全性可以规约到数学困难问题   劣势:如果困难问题被破解,则可能失效

三、随机数
随机数应用场景:生成秘钥、生成初始向量IV、生成随机盐值
真随机数TRNG:物理世界的噪声源等
伪随机数DRNG:通过安全的伪随机数生成的序列,在随机种子保密的前提下,在计算复杂度意义上和真随机数无法区分。

安全随机数生成器
OpenSSL1.1.X的RAND_pri_bytes
OpenSSL FIPS模块中实现的DRBG
中软iPSI组件的CRYPT_random( )(须开启DRBG)
中软VPP的IPSI_CRYPT_rand_bytes
JDK的java.security.SecureRandom
中软TEE的TEE_GenerateRandom

不安全随机数生成器
C标准库random()、rand()
Java的java.util.Random

DRNG的构造方法
任何安全伪随机数生成器都可以这样构造:
首选,选取一个标准的DRBG算法(如ctr_drbg)
第一阶段:初始化、采集噪声。反复对噪声源进行采样、积累,直到积累够需要的熵值
根据NIST标准的要求,熵池中积累的熵值需要大于等于安全强度(例如安全系统希望达到128比特安全强度,则DRBG在输出之前需要在其熵池中积累至少128比特的熵值)
熵值测试算法可以参考AIS31标准中定义的T8测试项
如何积累足够的熵值:
第一种做法是反复采样积累噪声信号直到总的熵值满足要求,然后将积累的噪声信号作为单个种子一次性输入DRBG进行初始化
第二种做法是用熵值测试工具对数字化噪声信号进行熵值测试,然后将噪声信号输入DRBG的熵池更新接口进行更新。迭代多次直到熵值达到要求。
第二阶段:输出伪随机序列,更新熵池
持续输出伪随机序列的同时,可以输入额外的熵值更新熵池,这样可以满足即使熵池状态泄露,之后生成的伪随机序列也不会被预测
根据伪随机生成器的原理,如果不额外输入熵值,当熵池泄露,则后续伪随机序列可以预测。
注:请根据业务场景需求判断会否需要在输出伪随机序列的阶段引入额外熵值
 



这篇关于密码算法(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程