什么方法使用时写入自己的加密方法?[关闭]
-
02-07-2019 - |
题
多年来,也许10,我已经迷上了加密技术。我读了一本关于异或位于加密,并且已经上瘾自从事情。
我猜测它是更公平地说,我着迷于那些可以打破各种加密方法,但我跑题了。
来点-你用什么方法的时候写的密码?是模糊处理好的密码?
我使用的两个关键基于异或加密,各哈希技术(SHA1)关键,并且简单的事情,如扭转串在这里和那里,等等。
我有兴趣看看别人怎么想的,并尝试在编写一个不那么出的加密方法。还有--任何信息的利弊如何去关于"打破"各种加密技术将是有趣的。
以澄清--我不想使用此在任何生产码或任何代码的地雷对于这个问题。我是有趣的在学习如何运作,通过玩弄周围,没有重新发明轮子。:)
Ian
解决方案
与其他人说到目前为止所说的相反,去吧!是的,你的代码可能有缓冲区溢出漏洞,可能很慢,有错误等等,但你正在做这对于有趣> !我完全理解在玩加密时发现的娱乐享受。
话虽如此,密码学根本不是基于混淆(或者至少不应该)。好的加密将继续有效,即使 Eve 已经在您的混淆代码中完成了了解发生了什么。 IE:许多报纸都有替代码谜题,读者试图打破早餐。如果他们开始做翻转整个字符串的事情,是的,那就更难了,但Joe Reader仍然可以打破它,neve tuohtiw gnieb dlot。
良好的加密是基于假设(尚未证实,AFAIK)真正困难的问题。这方面的例子包括保理素数,查找日志,或者其他任何 NP-complete 问题。
[编辑:快照,这些都不是已证实 NP-complete。它们都是未经证实的,但却不同。希望你仍然看到我的观点:crypto基于单向函数。这些操作很容易做,但很难撤消。即乘以两个数字vs找到产品的素因子。很好的 tduehr ]
更多的力量让你玩一个非常酷的数学分支,只记得加密是基于那些困难而不复杂的事情。许多加密算法,一旦你真正理解它们,都是令人难以置信的简单,但仍然有效,因为它们基于一些困难的东西,而不仅仅是切换字母。
注意:有了这个说法,一些算法确实增加了额外的怪癖(比如字符串切断),使得暴力迫使它们变得更加困难。我的一部分感觉就像我在某处引用了 DES ,但我不相信... [编辑:我是对的,请参阅本文第5段对于排列的引用是无用的。]
顺便说一句:如果您以前没有找到它,我猜想 TEA / XTEA / XXTEA 系列算法会引起人们的兴趣。其他提示
我能给你的最好建议是:抵制重新发明轮子的诱惑。密码学比你想象的更难。
获取Bruce Schneier的书应用密码学并仔细阅读。
正确的答案是不要做这样的事情。最好的方法是为此选择许多加密库中的一个,并在您的应用程序中使用它们。通过默默无闻的安全永远不会奏效。
选择当前的加密算法顶级标准。 AES用于加密,SHA256用于散列。 Elgamal公钥。
阅读应用密码学也是一个好主意。但本书的绝大部分内容都是大多数应用程序都不需要的实现细节。
编辑:扩展编辑中给出的新信息。绝大多数当前的密码学涉及许多复杂的数学。即使是看起来像各种各样的位置的块密码也是一样的。
在这种情况下,请阅读Applied Cryptography,然后获取应用密码学手册您可以免费下载。
这两者都有很多关于加密算法的信息。对差分和线性密码分析等事物的一些解释。另一个资源是 Citeseer ,其中有许多学术论文被这两本书引用下载。
密码学是一个艰难的领域,具有丰富的学术历史,可以随时随地进行。但是如果你掌握了这些技能,那就像我发现的那样非常有益。
在这里练习:
http://www.schneier.com/crypto-gram-9910。 HTML#SoYouWanttobeaCryptographer
对于初学者,请查看立方体攻击文件( http://eprint.iacr.org/2008/ 385 )并尝试用它打破一些算法。熟悉破解加密方案后,您将更好地创建加密方案。
就生产代码而言,我将重复已经说过的内容:只使用市场上可用的内容,因为所有主流方案都已经过多轮密码分析。
所有上述建议是声音。混淆坏。不要把你自己的密码进入的产生未首先让公众打在了一段时间。
一对夫妇的事情,添加:
编码是 不 加密。我最近绕过一个网站的验证系统,由于开发商的误会这里。
学习如何打破,甚至最基本的系统。你会惊讶如何经常知识的简单的旋转密码实际上是有用的。
A^B=C。你说你已经工作有两个关键异或加密。当建立一个密码系统经常检查你的步骤是实际完成的东西。在两个关键异或种情况下你真的只是使用一个不同的密钥。
A^A=0.XOR enryption是非常微弱的针对已知的或明文的攻击。如果你知道所有或部分明文的,你可以得到所有或部分的关键。明文^Cyphertext=关键
另一个很好的书,是代码簿由西蒙*辛格。它去过了一些历史的密码技术和方法打破数的密码系统,他涵盖。
两个算法的学习(中学习他们的历史抛在身后):
- 3DES:是的,它是过时的,但它是一个良好的起点学习fiestel和框cyphers并且有一些很好的经验教训,在它的建立从DES。此外,理由的加密,解密进行加密方法使用是一件好事,学习。
- RSA:我要显示我内心的数学怪人在这里。或许最简单的算法加密的用至今。方法打破它是已知的(只有因素的关键),但在计算上非常困难的。m^d mod n其中n=p*q(p和q总理)和gcd(d、n)=1.一点点小组/些理论解释了为什么这个不是很容易地扭转不知道p和q.在我的数量理论,当然我们证明背后的理论这个至少半打的方式。
注意PhirePhly:
总理因式分解和分散记录不NP完成,或NP-很难对这一问题。他们都是未知的复杂性。我想你会得到一个体面的成名只是从找的那一部分。这就是说,其余的你的说法是正确的。好的加密是基于东西都容易做到,但很难撤消没有钥匙。
除非您(成为)该领域的专家,否则不要在生产产品中使用自制加密。够了。
不要!的
即使是专家也非常非常很难知道他们是否做得对。在加密CS类之外,只需使用其他人的代码。只有当你绝对必须使用已知的良好代码测试其中的鼻涕时才能使用端口代码。
大多数专家都认为,在开发加密方法和算法时,开放性比混淆更有价值。
换句话说,每个人似乎都能够设计一个新的代码,除了它们之外每个人都可以破解。最好的加密在测试中得以存在,并且有一些加密的消息放在那里并且拥有最好的加密黑客试图打破它。
一般来说,大多数混淆方法和简单的散列(我自己也做过很多)很容易被打破。这并不意味着他们试验和了解它们并不好玩。
密码学书籍清单(来自维基百科)
这个问题引起了我的注意,因为我正在重新阅读Neal Stephenson的 Cryptonomicon 虽然它是一部小说,但这本身并不是一个糟糕的概述......
为了回应其他人(后代),永远不要实现自己的加密。使用图书馆。
那就是说,这是一篇关于如何实现DES的文章:
http://scienceblogs.com/goodmath/2008/09/des_encryption_part_1_encrypti.php
排列和噪声对许多加密算法至关重要。重点不在于模糊事物,而在于为流程添加步骤,使暴力攻击变得不切实际。
此外,请阅读并阅读应用密码学。这是一本很棒的书。
我参加了一个码的安全届会议在这一年澳大利亚技术大会.在谈AES算法。净及它是如何选定的,该主持人(岩石赫克曼)告诉我们的技术之一,已被用来打破以前的加密。有人设法使用热成像摄影机记录cpu的热签字,而这是加密的数据。他们能够使用这种记录,以确定哪些类型的计算的芯片是在做的,然后反向工程的算法.他们有太多时间在他们的手,而且我相当确信我永远不会有足够的智能击败那样的人!:(
- 注:我真诚地希望,我必须转达的故事是否正确,如果没有-错误很可能是我的,不是演讲者提到。
你不应该在产品中使用自制的加密技术,这已经被打死了。但是我已经阅读了你的问题而且你明确表示你只是为了好玩而做。对我来说听起来像真正的极客/黑客/学术精神。你知道它有效,你想知道它为什么会起作用,并试着看看你是否可以使它发挥作用。
我完全鼓励这样做,并且为了好玩而为我编写的许多程序做同样的事情。我建议阅读这篇文章( http://rdist.root .org / 2008/09/18 / dangers-of-amateur-cryptography / )在一个名为<!> quot; rootlabs <!>“的博客上。在帖子中有一系列你应该发现非常有趣的链接。一个对数学/加密感兴趣并且拥有计算机科学博士并且为Google工作的人决定撰写一系列有关加密编程的文章。他提出了一些行业专家Nate Lawson指出的非显而易见的错误。
我建议你看看。如果它不鼓励你继续尝试,毫无疑问它仍会教你一些东西。
祝你好运!
我同意不重新发明轮子。
请记住,通过默默无闻的安全根本不是安全措施。如果您的安全机制的任何部分使用短语<!>“;没有人会想到这一点!<!>”,它不安全。想想AES - 这个算法是公开的,所以每个人都知道完全它是如何工作的,但是没有人可以破解它。
其他答案 - 发明加密方案绝对是专家的事情,任何新提出的加密方案确实需要公开审查任何合理的验证希望和对其稳健性的信心。然而,实现现有的算法和系统是一个更实际的努力<!>“为了有趣<!>”;并且所有主要标准都有良好的测试向量,以帮助证明您的实施的正确性。
话虽如此,对于生产解决方案,现有的实施方案很丰富,通常没有理由您需要自己实施系统。
我同意所有答案,<!>“不编写自己的加密算法以供生产使用<!>”;并且<!>“地狱是的,为了你自己的启发而去吧 <!>”,但我想起了一些我认为古老的布鲁斯施奈尔经常写的东西:<!> 某人很容易创造出他们自己无法破解的东西。<!>
非专家应该能够做到的唯一加密是骨简单的One Time Pad密码。
CipherTextArray = PlainTextArray ^ KeyArray;
除此之外,任何值得关注的东西(即使是娱乐)都需要高水平的数学学位。
我不想深入研究已经给出的正确答案(不要用于制作;简单的逆转不够;混淆不好;等等)。
我只想添加Kerckoff的原则,<!>;密码系统应该是安全的,即使系统的所有内容(密钥除外)都是公共知识<!>“。
虽然我在谈论它,但我也会提到Bergofsky的原则(Dan Brown在数字堡垒中引用):<!>“如果计算机尝试了足够的密钥,那么在数学上保证找到合适的密钥。代码<!>#8217; s的安全性并不是它的密钥不可靠,而是大多数人没有<!>#8217;没有时间或设备可以尝试。<!>“;
只有那本身就不是真的;丹·布朗成功了。
回应PhirePhly和tduehr,关于保理的复杂性:
可以很容易地看出,因子分解是NP和coNP。我们需要看到的是问题<!>给定n和k,找到n的素数因子p,其中1 <!> lt; p <!> lt; = k <!> quot;并且<!>表示没有这样的p存在<!>都在NP中(第一个是因子分解问题的决策变体,第二个是补语的决策变体)。
第一个问题:给定候选解p,我们可以很容易地(即在多项式时间内)检查1 <!> lt; p <!> lt; = k以及p是否除以n。解决方案p总是比n更短(用于表示它的位数),因此因子分解为NP。
第二个问题:给定一个完整的素数因子分解(p_1,...,p_m),我们可以快速检查它们的乘积是否为n,并且没有一个在1和k之间。我们知道PRIMES在P中,所以我们可以在多项式时间内检查每个p_i的素数。由于最小素数为2,因此在任何有效因式分解中最多有log_2(n)素因子。每个因子都小于n,因此它们最多使用O(n log(n))位。因此,如果n没有1和k之间的素因子,则有一个短(多项式大小)证明,可以快速验证(在多项式时间内)。
因此,因子分解在NP和coNP中。如果它是NP完全的,则NP将等于coNP,这通常被认为是错误的。人们可以把这作为分解确实不是NP完全的证据;我宁愿等待证明; - )
通常,我首先获得数论博士学位。然后,我进行了大约十年左右的研究,并通过大量的出版和同行评审进行跟进。就我使用的技术而言,它们来自我的研究和我的同行的各种技术。偶尔,当我半夜醒来时,我会开发一种新技术,实现它,在其中找到漏洞(在我的数论和计算机科学同行的帮助下),然后从那里进行改进。
如果给鼠标算法......