Ita*_*Ale 4 security encryption cryptography
我必须首先说我从未研究过密码学,而我在这个主题上所知道的只是基本概念.
我们正在寻找一种使用密码加密某些数据(存储到数据库中)的快速简便方法.我知道"最安全"的算法是AES,但它对我们来说可能太复杂了,我知道它要求我们获得美国政府的授权等.
我们考虑过这个(简单)算法,这让我想起(但我可能错了)一种"一次性垫".(它不是用任何特定语言编写的......这只是想法:))
// The string we need to encrypt
string data = "hello world";
// Long string of random bytes that will be generated the first time we need to encrypt something
string randomData = "aajdfskjefafdsgsdewrbhf";
// The passphrase the user selected
string passphrase = "foo";
// Let's generate the encryption key, using randomData XOR passphrase (repeating this one)
string theKey = "";
j = 0;
for(i = 0; i < randomData.length; i++)
{
theKey += randomData[i] ^ passphrase[j];
j++;
if(j == passphrase.length) j = 0;
}
// Encrypt the data, using data XOR theKey (with theKey.length >= data.length)
string encryptedData = "";
for(i = 0; i < data.length; i++)
{
encryptedData += data[i] ^ theKey[i];
}
Run Code Online (Sandbox Code Playgroud)
在磁盘上,我们将只存储randomData和encryptedData.每次都会向用户询问密码.
这样的算法有多安全?除了蛮力外,还有其他方法可以破解吗?我不认为统计分析会对此有用,是吗?它是"像一次性垫一样安全吗?
谢谢!
这非常弱.统计分析会在眨眼之间破解它.一些勤奋的纸笔猜测也可能很快破解它.
唯一的例外是,如果(1) randomData从一个真正的加密强度源截取,(2) randomData是至少只要你的明文数据,(3) randomData是从来不曾重新用于不同的消息,和(4 )你摆脱了passphrase完全和治疗randomData为您的钥匙.在那种情况下,你有一个相当于一次性垫.
不,这不安全.
如果随机数据与加密数据一起存储,那么它就等同于使用密码短语进行异或运算:这是因为攻击者可以简单地用随机数据对加密数据进行异或,并获得明文XOR密码短语作为结果.