这种加密是“安全的”吗?

时间:2011-05-26 16:39:42

标签: 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];
}

在磁盘上,我们只存储randomData和encryptedData。 每次都会向用户询问密码。

这样的算法有多安全? 除了蛮力外,还有其他方法可以破解吗?我不认为统计分析会对此有用,是吗? 它是“像一次性垫一样安全吗?”

谢谢!

4 个答案:

答案 0 :(得分:9)

您只需导入一个AES库,让它完成所有繁重的工作。美国政府的授权?这是一项公共职能,美国政府也使用它。

答案 1 :(得分:5)

这非常弱。统计分析会在眨眼之间破解它。一些勤奋的纸笔猜测也可能很快破解它。

唯一的例外是如果(1) randomData来自真正的加密强度源,(2) randomData是至少只要您的纯文本数据(3) randomData永远不会被重复用于其他消息,并且(4)你摆脱了完全passphrase并将randomData视为您的关键。在这种情况下,你有一个相当于一次性垫的东西。

答案 2 :(得分:5)

不,这不安全。

如果随机数据与加密数据一起存储,那么它就等同于使用密码短语进行异或运算:这是因为攻击者可以使用随机数据简单地对加密数据进行异或,并获得明文XOR密码短语作为结果。

答案 3 :(得分:2)

不,这不安全。使用xor和随机数据和密码这种方式是完全错误的。 一次性密码密码学需要随机数据与要加密的数据的长度相同。