在C#中创建我的对称密钥

零假设

回顾了一些对称密码学方法后,我看到了很多示例,这些示例在类中对私有静态变量进行硬编码,通常类似于:

string key = "THISISYOURENCRYPTIONKEY!"

然后再往下,代码使用它进行加密/解密。

除了正确的实现/算法/策略以及将其存储在何处,我有一个简单的问题。我的钥匙的价值应该是什么?即我如何生成它?我看到的大多数示例都使用它们刚组成的一些随机语句,或者使用.net类生成带有加密安全随机数生成器的字节数组,该生成器返回byte []。我该如何处理byte []?我认为它不应该是字节数组,而是可以保存在某个地方的实际字符串(可能不在类的顶部)。

有人可以帮我整理一些基础知识吗?

谢谢!

维克多·佩勒

对于对称加密算法,最经常需要二进制数组作为密钥。它提出了以下问题:

  • 如何获取密钥的二进制数据?

密钥应该是随机的。如果不是随机的,则很容易被他人发现。不幸的是,用计算机生成随机数并不是那么简单。简单的随机生成算法是循环的,周期很短,因此很容易找到用于密钥的段。有时他们尝试从现实世界中获取一些输入作为参数以生成随机数,例如时间(可预见的,不安全的)从硬盘驱动器中获取一些数据,从网络中获取数据,让用户键入某些内容等。这些是或多或少可以预测的事情。也可以购买为此目的而设计的设备,它们具有强大的算法并具有很好的种子值存储,或者它们具有某种粒子检测器,因为这些粒子随机撞击设备。关键是,如果可能,密钥必须不可预测。

  • 您需要存储密钥吗?

如果是对称加密,则使用相同的密钥进行加密和解密。因此,如果要解密数据,则必须至少第二次使用密钥-因此必须以某种方式保留它。保留钥匙很危险,因为其他人可能会得到它。将密钥保存到硬盘驱动器?它适用于非常简单的系统,但是很容易找到密钥。Windows提供关键存储提供程序,并且有许多实现方式。简单的实现将密钥存储在硬盘驱动器上,但是使用另一个密钥对其进行了加密-但当然密钥存储在hardrive中,否则Windows将无法为您解密密钥。可以通过在启动过程中获取“主”键的方式来设置系统,因此管理员必须键入它,然后将该键存储在内存中-但是管理员必须记住“主键”,也许它可以写在他钱包里的纸上:)您也可以购买设计用于存储密钥的设备,这些设备具有非常复杂的机制来安全地存储密钥,并使用专门用于此目的的芯片进行存储。这些设备通常可以进行加密/解密,因此密钥不必离开设备-仅在必须共享时,在对称算法的情况下这是不可避免的。因此,这是一个很大的话题,一个人可以花大笔钱来保护密钥,其他人则乐于使用Windows密钥存储区。

人们不记得32字节的六进制数组,这是发明密钥派生算法的原因之一。它们获取输入文本并从中生成伪随机数据。当然,此数据不如真正的随机密钥安全。您可以在.net中使用rfc2898derivebytes

  • 您需要多次使用钥匙吗?

这取决于您的用例,但是最好避免多次使用密钥。通信协议在握手期间同意使用新的对称密钥,并在一段时间后更改密钥,即使它们仍处于连接状态。这是因为长时间使用密钥意味着密钥存在时间更长(意味着有更多时间来窃取密钥)并产生更多的数据,这是分析密钥并尝试找出密钥的良好输入。另外,如果您使用单个密钥加密所有内容,则只需一个密钥即可窃取所有数据。如果有更多的密钥,则一旦知道密钥,则只有部分数据是危险的。一个时间片加密是唯一无法基于统计分析解密的加密。在该算法中,密钥的每一位仅使用一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

由于指数大小有限,如何在 C# 中创建非对称密钥?

来自分类Dev

确定在Swift中创建对称密钥的异常原因

来自分类Dev

是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

来自分类Dev

如何从C#对称加密对象中将密钥读取为字符串

来自分类Dev

为什么我不能在 SQL Server 中为 dll 生成非对称密钥?

来自分类Dev

我可以使用Bouncycastle for C#用密码创建可复制的PGP密钥对吗?

来自分类Dev

将对称密钥存储在Java卡中

来自分类Dev

在R中创建对称矩阵

来自分类Dev

生成对称密钥并存储在android密钥库中

来自分类Dev

我可以在C#中创建经典的VB数组吗?

来自分类Dev

我如何在C#中创建按钮

来自分类Dev

C++ 中的对称矩阵

来自分类Dev

如何安全地存储对称密钥?我可以使用 pkcs12 来存储对称密钥吗?

来自分类Dev

如何使用“ SecItemAdd”在OS X中存储对称密钥?

来自分类Dev

如何在Java中以非对称加密生成密钥对?

来自分类Dev

如何在Android Keystore中存储对称密钥

来自分类Dev

在R中创建对称频率表

来自分类Dev

从R中的长表创建对称矩阵

来自分类Dev

如何在Graphviz中创建对称边?

来自分类Dev

如何在Java PKCS12密钥库中存储对称密钥

来自分类Dev

在C#中创建错误

来自分类Dev

使用TSS和C中的TrouSerS创建背书密钥

来自分类Dev

我正在尝试从数组中的非恒定值在C#中创建图表

来自分类Dev

无法在我的 C# 脚本中在 monodevelop unity 中创建或声明游戏对象变量

来自分类Dev

检查C中的数组是否对称

来自分类Dev

合并C#中的字典,以便存在公共密钥

来自分类Dev

检查NewtonSoft JObject C#中是否存在密钥

来自分类Dev

如何在C#中从JSON获取密钥

来自分类Dev

更新 app.config c# 中的密钥

Related 相关文章

  1. 1

    由于指数大小有限,如何在 C# 中创建非对称密钥?

  2. 2

    确定在Swift中创建对称密钥的异常原因

  3. 3

    是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

  4. 4

    如何从C#对称加密对象中将密钥读取为字符串

  5. 5

    为什么我不能在 SQL Server 中为 dll 生成非对称密钥?

  6. 6

    我可以使用Bouncycastle for C#用密码创建可复制的PGP密钥对吗?

  7. 7

    将对称密钥存储在Java卡中

  8. 8

    在R中创建对称矩阵

  9. 9

    生成对称密钥并存储在android密钥库中

  10. 10

    我可以在C#中创建经典的VB数组吗?

  11. 11

    我如何在C#中创建按钮

  12. 12

    C++ 中的对称矩阵

  13. 13

    如何安全地存储对称密钥?我可以使用 pkcs12 来存储对称密钥吗?

  14. 14

    如何使用“ SecItemAdd”在OS X中存储对称密钥?

  15. 15

    如何在Java中以非对称加密生成密钥对?

  16. 16

    如何在Android Keystore中存储对称密钥

  17. 17

    在R中创建对称频率表

  18. 18

    从R中的长表创建对称矩阵

  19. 19

    如何在Graphviz中创建对称边?

  20. 20

    如何在Java PKCS12密钥库中存储对称密钥

  21. 21

    在C#中创建错误

  22. 22

    使用TSS和C中的TrouSerS创建背书密钥

  23. 23

    我正在尝试从数组中的非恒定值在C#中创建图表

  24. 24

    无法在我的 C# 脚本中在 monodevelop unity 中创建或声明游戏对象变量

  25. 25

    检查C中的数组是否对称

  26. 26

    合并C#中的字典,以便存在公共密钥

  27. 27

    检查NewtonSoft JObject C#中是否存在密钥

  28. 28

    如何在C#中从JSON获取密钥

  29. 29

    更新 app.config c# 中的密钥

热门标签

归档