加密种子和盐有什么区别?

信息安全 密码 密码学 哈希
2021-08-10 05:09:07

今天我很难向朋友解释其中的区别。

我知道在生成“随机”字符串时会使用种子。当为哈希提供不同的结果时,会使用盐。

有什么更好的方式来描述这些概念及其可能的差异。

4个回答

种子:

加密是由随机数驱动的,但是如何生成真正的随机数呢?当前毫秒?正在使用的处理器线程数?你需要一个起点。这称为种子:它启动一个随机数。

盐:

当你散列一个字符串时,它总是以相同的散列结束。

foo=acbd18db4cc2f85cedef654fccc4a4d8每次。

当您想要存储想要真正隐藏的东西(如密码)时,这是一个问题。如果你看到acbd18db4cc2f85cedef654fccc4a4d8你总是知道它是foo因此,您只需在原始字符串中添加一个“盐”以确保它是唯一的。

foo+ asdf=e967c9fead712d976ed6fb3d3544ee6a

foo+ zxcv=a6fa8477827b2d1a4c4824e66703daa9

所以'salt'通过模糊原始文本使'hash'更好。

我能想到的最简单的术语:

  • 种子是一个随机值,通常必须保密或加密被破坏
  • salt是一个随机值,通常不是秘密,用于使一些预先计算的攻击更难

我喜欢使用这些,因为保密或不保密的想法对任何人都有意义。

你的朋友的困惑实际上是有道理的,因为没有太大的区别。在高层次上,每个都用作输入来修改加扰函数的输出。

尝试强调散列函数和随机数生成器之间的区别,以及它们通常用于什么。此外,能够区分用于统计的常规随机数生成器(可以使用可预测或已知的种子)和用于密钥生成的加密安全随机数生成器(需要不可猜测的熵源作为种子。 )

PRNG(seed)=一串随机数

哈希(盐+密码)=哈希密码

随机数生成器突出了计算机的基本性质。它们不是随机的。即使是感知到的随机性也不是随机的,而是接近随机的,尽管人们最终可能会拿出那个老掉牙的例子,即朝着一个目标走了一半距离却从未真正达到它。