- 已编辑
最近搬砖学到一种用按位 xor 实现加密一小段字符串的操作,具体模式大概是这样的:
加密:密文 = 原文 xor 密钥
解密:原文 = 密文 xor 密钥
在想这种模式的安全性如何,想起原来上安全学课的时候有涉及相关内容(当时没认真听、都忘了= =,对不起@Bintou 老师),趁周末看一看写一写。
大致总结:
- C语言 int/short/char 等类型下的加减乘除运算,实质是类似钟表的模型,构成一种有限位数下的 mod 运算。各类密码算法也是利用了同余和 mod 运算的数学性质,把抽象代数相关的理论落地,去做各种各样的事情。
- 开头说的那种 xor 的机制的学名叫「Vernam密码」,只要密钥比原文长,且这个密钥本身无任何规律的话,用这种方式加密,在只有密文的情况下是不可能破解出原文的。
大部分场景无法达到这种理想情况,主要通过两种路径去增大统计猜测破解的难度:
一种是「流密码」:基于有限长度的密钥,去生成理论上无限长度、且无法找出规律的密钥流,最后用 Vernam 的 xor 姿势实现最终的加密解密过程。
另一种是「Feistel 密码结构」:除了常规的代替和置换手段,还会利用混淆和扩散等姿势,把输入分成特定长度的组,再分别加密解密;
另外,还涉及到不同使用场景的工作模式(其中也用到很多类似 Vernam xor 运算)。
具体的数学和算法有点难(感觉只有专职搞密码学的大佬才有空研究),有机会再搞些题目训练训练= =
参考:
抛砖引玉,欢迎密码佬们分享相关的入门话题,即使是日常搬砖写业务,也蛮实用的~