我必须首先说我从未研究过加密技术,而我在这个主题上所知道的只是基本概念。
我们正在寻找一种使用密码加密某些数据(存储到数据库中)的快速简便方法。 我知道“最安全”的算法是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。 每次都会向用户询问密码。
这样的算法有多安全? 除了蛮力外,还有其他方法可以破解吗?我不认为统计分析会对此有用,是吗? 它是“像一次性垫一样安全吗?”
谢谢!
答案 0 :(得分:9)
您只需导入一个AES库,让它完成所有繁重的工作。美国政府的授权?这是一项公共职能,美国政府也使用它。
答案 1 :(得分:5)
这非常弱。统计分析会在眨眼之间破解它。一些勤奋的纸笔猜测也可能很快破解它。
唯一的例外是如果(1) randomData
来自真正的加密强度源,(2) randomData
是至少只要您的纯文本数据(3) randomData
永远不会被重复用于其他消息,并且(4)你摆脱了完全passphrase
并将randomData
视为您的关键。在这种情况下,你有一个相当于一次性垫的东西。
答案 2 :(得分:5)
不,这不安全。
如果随机数据与加密数据一起存储,那么它就等同于使用密码短语进行异或运算:这是因为攻击者可以使用随机数据简单地对加密数据进行异或,并获得明文XOR密码短语作为结果。
答案 3 :(得分:2)
不,这不安全。使用xor和随机数据和密码这种方式是完全错误的。 一次性密码密码学需要随机数据与要加密的数据的长度相同。