编写我自己的加密算法

信息安全 加密 密码学 。网 编程
2021-09-04 13:11:57

我目前正在大学学习 IT(英国大学又名不是大学),课程作业让我无聊至死。我已经用 C# 和 Java 等 OO 语言编写了相当长的一段时间,但经常感到无聊并很快放弃,因为其中大部分都是我讨厌做的无聊的 UI 东西,我提出的项目很少有事可做通过代码设计和实际创建算法。我想开始编写自己的各种算法,并开始远离用户友好的一面,开始学习我感兴趣的东西,即密码学和压缩。我想编写自己的加密算法来加密文件或字符串的字节。我有几个问题:

  • 我将从哪里开始,推荐哪些书籍/材料从密码学开始?
  • 我是否需要广泛的密码学知识才能开始使用基本算法?
  • C# 可以将加密算法付诸实践吗?

任何帮助将不胜感激。我想开始编写代码,所以在申请 uni 时,我有一些东西可以展示我对申请的所有大胆主张!

4个回答

当然,您可以从小处着手并实现自己的算法。不要假设它们提供任何超越混淆的安全性

密码学的难点在于找出某些东西实际上安全的原因。您将无法在几个月内做出决定,如果您觉得自己到了那个时候,那么您很可能是错的。

找到事物不安全的原因比找到它们安全的原因要容易得多,因此,如果您想从某个地方开始,请开发自己的算法,直到您认为它们是安全的,然后尝试找出它们不安全的原因并找到解决方法攻击他们。

大多数错误都是在实现算法时犯的。因此,如果您想获得一份高薪工作,您可以学习如何正确实施这些东西。

我建议开始实施 AES 之类的东西,而不是继续使用 CBC 或 CCM 等不同的操作模式,并找出为什么随机性很重要。继续使用 SHA-2 和 HMAC 并继续进行非对称加密。始终检查其他人做了什么以及他们为什么这样做,并特别注意旁道攻击及其执行方式。如果你在那个时候,你会找到继续前进的路。

首先参考“HAC”,可在线免费获得: http: //cacr.uwaterloo.ca/hac/

[编辑] JRsz 的建议,不应隐藏在评论中。一本适合初学者的好书: http: //crypto-textbook.com/

Coursera

这是我的 2 美分:

加入 Coursera 密码学在线课程:

课程需要六个星期。每周都有几个讲座视频、一个分级测验和一个可选的编程作业。(这些任务涉及实现加密部分。)

在六周结束时有一个测试。

如果您想受到挑战,那么这是正确的方法。这是很多工作。我建议你每周计划 10 多个小时。如果您还想完成编程任务,则更多。

编辑:这是该课程先前运行的目录

澄清:编程作业只是为了加深对该主题的理解。它们显然不是你打算释放到野外的东西。
相反:“你从来没有自己实现过这个!” 消息一次又一次地重复。(并且没有放弃太多:只要“自己实现它!”在多项选择测试之一中,那就错了。)

从打破开始,而不是建立自己的。编写自己的算法的人发布了大量令人担忧的 stackexchange 帖子。环顾四周,找出他们有什么问题。(不要看发布的答案。)[好的搜索包括“这安全吗”和“这个算法有什么问题”。]

只有当你在其他人的工作中发现问题时,你才应该开始尝试实现其他人的算法。(@stackzofztuff 对 Coursera 的评论还不错——如果我记得的话,Dan Boneh 就是这样开始的,结构比在这里戳更多。)

如果你想开始研究这个领域, Bruce Schneier 的应用密码学是必读的。我很惊讶以前没有人建议过。

是的,即使在尝试推出自己的算法以获得乐趣之前,您也需要了解很多关于加密货币的知识。不过,甚至不要考虑将它们用于现实世界的问题——周围已经有很多糟糕的加密货币了。

关于编程,避免像瘟疫这样的专有语言。我建议使用 C,甚至 C++。