编写加密算法的技巧(仅供个人使用)

信息安全 加密
2021-08-19 18:20:37

我想先声明我完全理解编写自己的加密算法的危险,并且我永远不会使用自制加密来保护除我之外的任何人的数据。

今天,我被分配了一个计算机科学学期项目,它将我们所学的所有知识整合到一个程序中。该程序的部分功能是它可以加密和解密字符串。我们必须自己编写这些加密方法,所以我们不能使用我们正在使用的语言(Java)中内置的任何东西。最后,我们需要避免使用密钥进行加密的任何事情。

现在,在和我的一些同学交谈之后,似乎几乎每个人都在使用 ROT13 或其他类似的方法。因为我是一个优秀的人,因为我不想和其他人一样,我想设计我自己的加密方法。但是,我有点迷失在哪里开始。那么,加密有哪些基本或高级技术呢?

4个回答

如果您通常对项目之外的密码学感兴趣

这取决于您希望执行哪种类型的加密。巨大的警告:这个答案只是为你指出正确的理论方向。我强烈建议在开始之前做大量阅读 - 你阅读的越多,你就会越了解以前的密码是如何被破解的,并且不会犯同样的错误。

公钥

要操作公钥系统,您需要一个陷门功能不幸的是,维基百科上的建议非常准确:

已经提出了几个函数类,很快就发现陷门函数比最初想象的更难找到

活板门功能非常困难。陷门置换(函数的输出和输入集相同,因此函数“置换”集合内的输入)甚至更难。粗略地说,素数分解问题和离散对数问题是两个“大问题”。在这个领域有机会,使用现有的将是迄今为止最简单的方法。

对称密钥

对称密钥算法是故意可逆的,但没有一个输入(密钥)被设计为很难逆转。基本思想是混淆/扩散原理现代密码中的常用技术包括替换置换网络feistel 网络您还应该考虑阅读分组密码操作模式

对,很好,我应该从哪里开始?

通过阅读 - 尽可能多地阅读。我不喜欢“不要设计自己的加密货币”的标准建议。我认为人们应该尝试,如果他们愿意。但我不能足够强调要做到正确是多么困难。由于您的项目时间有限,一种技术可能是使用现有密码的简单示例,因此:

为您的项目

作为一项教育练习, RC4很容易实现。曾几何时(不久前),它被用来保护 SSL/WEP 流量 - 有时它仍在使用,因此您将使用真正的密码。它确实存在一些安全问题- 了解这些问题也将帮助您进行一般的加密教育。但是,由于您的要求是更少的绝对安全性和更多的学习,我认为这将是理想的。

如果你很有野心并且很了解你的语言,那么在 ECB 模式下实现 AES 也不是那么难。FIPS-197可读性很强,通常以相当容易理解的方式解释算法。

您认为 ROT13 是一个糟糕的例子是对的。即使不知道每个字符的偏移量是 13 个位置,假设您使用 ASCII,您只需尝试密文的 127 个(或扩展 ASCII 的 255 个)偏移量中的每一个,直到正确的一个丢失。因此,即使没有密钥,解密它也很简单。

您必须避免使用密钥的任何事情?就个人而言,如果不使用密钥,我看不出如何将算法称为“加密”。

您可以考虑编写自己的简化 DES 实现。顾名思义,简化 DES(或 S-DES)是 DES 的一个大大简化的版本。它使用 10 位密钥,而且很简单,可以用铅笔和纸来计算。

这篇论文是“Simplified DES”的第一个 Google 热门文章http://edipermadi.wordpress.com/2008/01/12/simplified-des-simulator/上还有一个视觉模拟器

我不想破坏你的乐趣,但你想考虑以下几点:

  1. 本质上,加密是什么?加密和解密事物的属性是什么?为什么我们作为一个社会这样做?您要考虑特征和过程。
  2. 什么是钥匙?根据您的研究,您可能需要向您的讲师请求澄清这一点。
  3. 创建所有加密技术家族的分类系统。通过进行这项研究,您可能会找到一两个有趣的答案。

这是一个基于学期的项目,所以不是你可以(或应该)在一夜之间回答的问题。代码本身可能只需要一两天。真正的学习是根据给定的约束找到解决方案。

你应该阅读应用密码学手册这本书也被称为“手册”。它是免费的,而且写得很好。但是第 2 章“数学背景”相当僵硬,这些概念中的大部分都不是在我当地的公立大学教授的(我看过)。