如果人们不使用自己的密码,(从错误中)如何学习?
简短的答案是自己滚密码,但在经过专业人员的审查之前,不要在生产中使用它。下面这个长长的答案可能需要几年时间才能解决。
犯错是学习过程中不可避免的一部分。多年来,我一直在为谷歌产品滚动加密,但我的代码并不是没有缺陷,而且永远不会没有缺陷。我发现从错误中学习最便宜的方法就是从别人的错误中学习。我推荐参加Cryptoography I,做CTF,并解决密码挑战。这不会花太长时间,很快你就会变得相当危险,因为你会发现很多密码错误。
但这只是个开始。当我到谷歌的时候,我以为我知道密码,因为看看我发现的所有漏洞!我大错特错了。我花了几年时间才从真正的专家那里学到了这门手艺,幸运的是,我的雇主有很多这方面的知识。
他们说,通过阅读好的代码,你可以成为一名更好的程序员。不幸的是,我已经痛苦地认识到,这条规则通常在密码中不起作用,原因有三:
由于旁信道和其他限制,密码通常并不明显。想象一下在没有if语句的情况下进行编码;
密码通常有许多看起来不必要的细微细节,但一旦更改或删除,就会完全破坏安全性;以及。
除了学习基础知识,没有捷径可走。这不难,但需要时间。以下是您可能想要查看的几个资源:
由Dan Boneh和Victor Shoup所著的密码术I和密码书:这是关于应用密码学的最好的传授材料;
数学密码学入门:如果你担心你没有足够的数学知识来做密码学,这本书将帮助你消除这种恐惧;
Tink:这是Google推荐的密码库(完全公开:我的团队拥有它)。Tink提供了高级API,所以如果你的目标是编写你自己的AES,你不会从中学到很多东西,但是它有关于常用加密技术的非常好的信息。
有趣的是,在花了多年时间研究这些资源之后,您仍然没有免费的通行证来滚动世界上所有的密码。你会意识到并欣赏密码是一个有很长食物链的深入而广阔的研究领域。坐在上面的是密码分析员,他们。
提出并解决整数分解、离散对数、最短向量、最近向量等数学难题;或。
底部是想要加密某些数据的软件工程师。沿着这条链,你会发现人们。
采用单向函数,构建基本原语,如AEAD、MAC、数字签名或公钥加密;
采用协议并构建API,如OpenSSL、Bouny Castle、JCE、Golang Crypto、libNa或Tink;以及
获取API并构建端到端加密、存储加密、用户身份验证等应用。
分歧并不总是被削减的,因为有些人是身兼数职的。问题是,除非你到达最高层,否则总是有很好的理由不使用你自己的密码。原因通常是不明显的、未知的、未知的。我见过一位杰出的工程师争辩说,他们没有推出自己的密码,因为他们没有从头开始实现AES,而是称为OpenSSL。
因此,如果你想推出自己的密码,请确保你了解自己在密码食物链中的位置,以及阻止你晋升的原因是什么。研究并消除上述原因。祝你好运,玩得开心!