密码学书籍说你应该公开你的加密/解密算法来测试它以防止攻击和密码分析,并且非暴露算法不被认为是强大的,因为它没有针对攻击进行测试,但他们也说加密算法的安全性取决于主要是关键长度和关键随机分布,以保护它免受暴力攻击和数学分析的关键.
我的问题是为什么我们需要暴露我们的算法,而它主要取决于密钥长度,如果我的密钥足够长并且真正随机化,那么了解算法有什么好处?
我有一些base-64编码的加密数据,并注意到相当多的重复.在(大约)200个字符长的字符串中,某个base-64字符在几次单独的重复运行中重复多达7次.
这是加密问题的红旗吗?根据我的理解,加密数据永远不会显示重复,即使明文是完全统一的(即使我加密2 GB除了字母A之外,加密版本中不应该有重大的重复).
我在文档中有一些转储分析,显示了一堆加密数据,以及生成的解密数据.解释了所使用的算法(简单RC4).丢失的唯一信息是用于从加密数据到解密数据的密钥.
我正在编写本文档材料的自动化测试.我可以选择自己的一些密钥并从明文重新创建加密数据,但我想知道是否有任何简单的密码分析方法来找到用于加密原始数据束的原始密钥.
蛮力方法可能是可能的,因为关键是非常小,但我更感兴趣的是知道是否存在任何更聪明的方法.
下面是我目前的C加密代码(使用OpenSSL):
unsigned char source[16] = {
0xdb, 0xa3, 0x13, 0x30, 0x79, 0xa3, 0xcd, 0x9e,
0x48, 0xf4, 0x8f, 0x06, 0x37, 0x1b, 0x45, 0xdd};
unsigned char expected_target[16] = {
0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66};
unsigned char target[16] = {};
unsigned char key[16] = {};
RC4_KEY crypt_key;
RC4_set_key(&crypt_key, 16, key);
RC4(&crypt_key, 16, source, target);
printf("key = [%02x %02x %02x %02x %02x %02x %02x %02x "
"- %02x %02x %02x …Run Code Online (Sandbox Code Playgroud) 据说DES是不安全的.我想这是因为密钥是55位长,所以使用暴力会花费最多2 ^ 55次迭代来找出现在不多的密钥.但是如果我们迭代2 ^ 55,我们何时知道何时停止?