Math 如何创建自己的密码,而不是使用AES或blowfish twofish等常用密码?

Math 如何创建自己的密码,而不是使用AES或blowfish twofish等常用密码?,math,encryption,Math,Encryption,我对密码系统背后的繁重的数学知识了解不多,当Z/nZ代数变得糟糕时,我会陷入困境,有时还会遇到所有这些指数。不是我不喜欢,只是你在网上找到的信息不容易被盲目的跟随 我想知道:当一个算法将一条消息编码成纯二进制时,它能有多可靠。如果我的算法是任意的,并且只有我知道,那么密码分析人员如何研究加密文件并解密它,有没有解码文件 我正在考虑不使用ASCII文本来编码我的消息,我有一些想法来制作这个算法/程序 对于密码分析人员来说,攻击AES或河豚加密的文件要比不知道文件加密的算法简单得多,但是他怎么做呢

我对密码系统背后的繁重的数学知识了解不多,当Z/nZ代数变得糟糕时,我会陷入困境,有时还会遇到所有这些指数。不是我不喜欢,只是你在网上找到的信息不容易被盲目的跟随

我想知道:当一个算法将一条消息编码成纯二进制时,它能有多可靠。如果我的算法是任意的,并且只有我知道,那么密码分析人员如何研究加密文件并解密它,有没有解码文件

我正在考虑不使用ASCII文本来编码我的消息,我有一些想法来制作这个算法/程序

对于密码分析人员来说,攻击AES或河豚加密的文件要比不知道文件加密的算法简单得多,但是他怎么做呢

我不知道我是否理解得很好,但一位CS老师曾经告诉我,密码更难破解

你觉得怎么样

对于密码分析人员来说,攻击AES或河豚加密的文件比加密文件的算法对他来说更简单

那么:

对于密码分析人员来说,在没有真正研究的情况下攻击一个未经测试的自编算法要比使用该文件加密的算法是一个众所周知的、经过验证的、已经正确使用的算法要简单得多

简而言之,除非你是专家,否则不要使用你自己的密码,除非你是该领域专家组的成员

任天堂在Wii中自己实现RSA时失败了,索尼在PS3中使用RSA时也失败了(他们几乎使用XKCD的随机数函数来实现M…)

你真的认为你可以通过默默无闻的安全措施来取胜吗


PS:这并不意味着你应该使用RSA上的Wikipedia条目并从中推出你自己的实现(这正是Sony和Big-N失败的原因),不要使用经过测试的开源实现。

当攻击者不知道你使用的是哪种算法并且它是安全的时,密码分析师的工作很辛苦。因此,如果您使用AES或您自己的密码,只要它与AES一样强大和安全,就不重要了。这是答案。密码学的要求有点高,因此你有很多方法可以在不知情的情况下攻击自己。我建议使用标准算法,可能会有一些安全的变体。

你似乎可以互换使用两个词,但请记住,你策略中最大的部分是“通过模糊实现安全”。你在赌博,因为没有人知道你在一个想法上的微小变化的确切细节,他们不会明白的

我不是安全专家,但我可以告诉你,你可能不会想出令人难以置信的新东西。密码学已经被人们研究了几千年,你的想法很可能不是原创的。即使你是一个相对优秀的程序员,并且编写了一些非常棘手的代码,问题也会归结到你面对的是谁。如果你只是想保护你的数据不受你妹妹的影响,那就没问题了。另一方面,如果你用它在互联网上发送信用卡号码,那么你注定要失败。它将以你没有想到或不知道的方式进行分析,最终被破解


另一种思考方式是:像AES这样的算法已经被该领域的专业人士广泛研究过,其安全性水平也已经得到了很好的理解。你自己想出的任何东西都不会有被最优秀最聪明的人攻击的好处。在人们开始报告身份盗窃之前,你几乎不知道它到底有多好。

常识是,你不应该构建自己的算法,特别是不要依赖这些算法来保持秘密

概念上的原因是好的加密是关于量化的机密性。我们不希望我们的秘密被破解,但我们希望能够更准确地知道破解我们的秘密需要多少成本(并希望表明成本太高,地球上任何实体都无法想象)。这是发生在二战后几年的真正进步:理解密钥和算法之间的区别。钥匙集中了秘密。算法成为实现

因为实现是实现的,所以它以某种代码或设备的形式存在,即使不使用它,它也是有形的和存储的。为实现保密要求始终跟踪代码所在的硬盘。如果攻击者看到二进制代码,他可能能够对其进行反向工程,这取决于他的智慧和耐心。这里的要点是很难说:“恢复算法描述需要花费X美元”

另一方面,钥匙很短。它可以更容易地安全储存;e、 你可以记住它,避免将它提交到任何永久存储设备。然后,你必须担心你的钥匙只有当你使用它(而不是当你不,例如在午夜,当你睡觉)。可能的键数是一个简单的数学问题。在找到密钥之前,您可以轻松准确地估计枚举可能密钥的平均成本。关键是量化安全的坚实基础。

因此,您不应该使用自己的算法,因为这样您就不知道您获得了多少安全性

而且,大多数使用自己的算法的人发现(通常是艰难的)他们根本没有得到多少安全性。设计一个好的加密算法很难,因为它无法自动测试。您的代码可能会运行,并正确解密它加密的数据,但它不会告诉您abo