密码学的学习笔记

密码技术手段:数据指纹,身份证明,消息的可信度和不可抵赖性,数据加密 信息安全(机密性,完整性,可用性,不可抵赖性) Hash函数 hash可以用于校验文件是否完整,数字签名的摘要信息等等 hash函数是将任意大小的输入映射成固定大小的哈希值的函数 hash函数具备抗原像性(无法通过哈希值求到输入的值,是具备单相性的),抗次原像性(很难得到两个不同输入内容确得到相同的hash值),雪崩效应(原文的改变会导致hash值发生变化),抗碰撞性(很难得到可以生成相同hash值的输入内容) 常见的哈希函数:md4,md5,sha1,sha224,SM3(国密发布),sha256,sha384,sha512等等 md5发布于于1992年,摘要长度为128个比特,hash值为16位字节(128/8=16),块大小512个比特(每一次计算都以512个比特来分组处理),轮计算4(16 step)(一共进行4轮的计算,每一轮计算16步,一共计算64步) 简单的来说就是hash值长度是16位字节,计算过程中每个512比特的数据块都会进行64步的计算 sha1发布于1995年,摘要长度为160个比特,块大小512个比特,轮计算4(20 step) md5和sha1的计算过程: 先将原消息作为一个头部,然后填充一个64位的尾部(这个尾部是说明了原消息有多长),然后中间填充一个经过计算得到的多少个位的数据(确保头部和尾部大小,以及中间的大小的和是512的倍数,这个中间会在开头填1,然后填0,直到头部和中间,以及尾部的bit是512的倍数为止),这个目的是将任意大小的原信息计算切成多个512的块,计算完成后是没有余的 也就是输入信息长度除于512不等于512-64时,进行填充,填充1和n个0,让其总长度等于(512-64)+512的倍数,这个填充是必须进行的,即便输入信息长度等于512-64,也要进行填充一个512bit的数据,确保填充位数是1到512之间 确保这个消息的长度=输入消息+64+填充 = 512的整倍数 md5会初始化4个32bit的值,sha1会初始化5个32bit的值 md5将512的块数据进行分组,分成16个32bit的子分组,然后对4个初始值进行循环计算 每个512块数据都需要进行4轮处理,每一轮64步的计算,然后得到128的结果,这个128位的结果将作为下一组的初始值,一直计算到最后的一组,得到就是128位md5哈希值 计算过程:在1到16步计算时,顺序获得16个子分组进行计算(即第几步就获取第几个分组的数据,例如第3步计算,使用第3组子分组进行计算),在17步到32步计算时,将跳跃获取16个子分组进行计算(跳跃的长度取决于当前的步数+5,即第18步时,获取2+5,第7组的数据),在33步到48步计算时获取当前步数+3,在49步到64步计算时获取当前步数+7,计算完成时,得到的数就是md5哈希值 如果有多个区块的数据,计算的步数就是n*64了,只是初始值变成了上一个区块计算完成的结果 mod 模计算 sha1原理和md5差不多,只是变成了80个步。并且将在20,40,60,80步用不同的计算方式 注意:md5和sha1都不安全了 md5 cryptographically broken and unsuitable for further use users should avoid using the MD5 algorithm in any capacity. As previous research has demonstrated, it should be considered cryptographically broken and unsuitable for further use sha1 谷歌SHA1碰撞实验 结论:应该放弃md5,sha1,改用sha2,sha3,BLAKE2等更安全的哈希函数 对称加密 AES,发布于1997年,其是迭代类型的加密,分组长度128bit,密钥长度有128,192,256,轮数分别10,12,14 计算过程: AES加密计算会进行4种操作,轮密钥加(AddRoundKey),字节替代(SubBytes),行移位(ShiftRows),列混淆(MixColumns) 128位的明文和128位的密钥被分组成16个子节,变成4*4的正方形矩阵 加解密的每一轮的密钥都是通过密钥扩展算法得到的,因此轮密钥也是4*4的正方形矩阵...

2024-03-01 · 2 min · Me