这只是一个学术问题,我不打算编写自己的加密软件。
每次有人问“我如何编写自己的加密货币?” 答案是不要。
我目前正在学习计算机科学,大学没有提供似乎有帮助的课程。数学系提供的一些课程可能会导致加密算法的研究生涯,但与实施算法和避免侧信道攻击无关。但显然有些人写了很好的加密货币。
它只是阅读漏洞并记住不要做同样的事情吗?或者需要的知识从哪里来?
这只是一个学术问题,我不打算编写自己的加密软件。
每次有人问“我如何编写自己的加密货币?” 答案是不要。
我目前正在学习计算机科学,大学没有提供似乎有帮助的课程。数学系提供的一些课程可能会导致加密算法的研究生涯,但与实施算法和避免侧信道攻击无关。但显然有些人写了很好的加密货币。
它只是阅读漏洞并记住不要做同样的事情吗?或者需要的知识从哪里来?
大多数情况下,是的,这是关于编写代码并记住不要做任何坏事。从本质上讲,密码编写过程实际上是理解和更新知识的结合。
要编写加密代码,您必须完全了解您编写的代码如何被翻译成汇编,然后是机器代码,然后是电信号;了解晶体管的工作原理会有所帮助。您不必在汇编中进行开发,但您必须能够考虑您的代码会变成什么。观察编译器的汇编输出(假设您使用 C 或类似的东西)非常有启发性。
这些知识的要点是,当今最流行的攻击都是关于边信道的,它们以执行时间或内存访问模式或代码功耗的细微差异为食。编程语言旨在提供隐藏所有这些细节的抽象视图;成功的密码编码器可以在编写代码时撤消他脑海中的抽象。加密编码员必须掌握他的编程语言,以至于他可以编写编译器本身(不是他会这样做,而是他必须能够)。
然后,您必须使自己与所有已知的攻击媒介保持同步,这意味着跟踪有关该主题的所有发现。在实验中,我发现这个网站 (security.SE) 和聊天室用户的无休止的闲聊是获取一些信息的好方法——但是,一旦你知道存在潜在的攻击,你就必须挖掘一下,包括阅读学术论文和摘要,这当然需要阅读学术论文的技能(你在攻读博士学位时获得的那种技能)。
加密实现只有在可以被审查的情况下才能被认为是好的,所以,不管你写得有多好,你仍然需要大量记录它。安全性是无法测试的,所以有些代码只有被完全理解才能被认为是安全的。“举证责任”落在开发人员的肩上:没有人找到破解代码的方法是不够的(目前);开发者自己必须明确地证明他的代码为什么是好的。
所有这些都是关于实现现有的标准化算法。例如,您正在编写RSA代码。该标准对每个位的位置非常具体,因此您的工作“仅”是制作一个不会泄漏有关密钥或加密数据的信息的健壮实现(这基本上意味着使用随机致盲或恒定时间代码一个固定的内存访问模式)。当考虑具有外部攻击者控制电源的嵌入式设备(例如智能卡)时,问题变得更加复杂,只能定义为“高级研究”(智能卡供应商雇佣高级研究人员正是为了这个原因)。对于更普通的软件平台,这是一个孤独的程序员可以做到的,只要他掌握了他的工具并知道如何使用学术研究。
设计自己的算法或自己的协议(协议可以定义为算法的集合)是另一种蠕虫。一个大的。
我不确定是否可以将良好加密编码所需的所有知识总结为一组可教的规则。不过,也有人在尝试。该网站可能不是最终的答案,但至少它包含许多好的建议和指示,并且至少可以作为一个值得关注的列表。在您能够阅读编码规则并至少了解每个列出的问题是什么、它来自哪里、如何利用它以及为什么您应该(或不)注意它之前,不要尝试编写生产级加密代码你的具体情况。
最终,良好的加密编码技能是建立在经验之上的,所以在这方面你能做的最好的事情就是先自己编写一些实现,然后将它们与其他实现进行比较,看看它们在哪些方面不同以及为什么。像SHA 系列这样的散列函数是一个很好的起点。
不完全回答您的问题,但是:我认为不运行自己的加密货币最重要的不是其他人更有能力(即使这可能是真的),但主要是每次您做某事时都会犯错误(好与不好不要改变)。
最正确的形式应该是 don't run not review crypto。
编写加密货币不应与编写其他关键代码不同,但在代码经过审查之前,您不应该对代码有信心。审查过程的质量使您对加密代码充满信心,因此新的真棒革命加密货币不是人们使用的东西,人们更愿意等待新技术经过审查后再使用。
当您编写自己的加密审查过程时,我真的认为它有效,并且罗杰一次阅读了整个代码而没有发现任何错误,所以它是安全的。
关于如何学习加密: