Security 是否有唯一“哈希”的算法

Security 是否有唯一“哈希”的算法,security,encryption,hash,Security,Encryption,Hash,我感兴趣的是找到一种算法,它可以将一段数据编码成一种散列,除非使用蛮力,否则无法将其转换回源数据,但对于每个唯一的输入都有唯一的输出。输出的大小无关紧要 不过,它应该能够对相同的输入进行两次散列,并给出相同的输出,因此使用随机丢弃的密钥进行常规加密是不够的。也不会使用已知密钥或salt进行常规加密,因为它们会暴露给攻击者 这样的事情存在吗 它在理论上是否存在,或者正常哈希算法中破坏数据的部分对于不可逆特性是否至关重要 这样的东西有什么用?好吧,想象一下,一个浏览器有一个应该从历史中排除的网站列表

我感兴趣的是找到一种算法,它可以将一段数据编码成一种散列,除非使用蛮力,否则无法将其转换回源数据,但对于每个唯一的输入都有唯一的输出。输出的大小无关紧要

不过,它应该能够对相同的输入进行两次散列,并给出相同的输出,因此使用随机丢弃的密钥进行常规加密是不够的。也不会使用已知密钥或salt进行常规加密,因为它们会暴露给攻击者

这样的事情存在吗

它在理论上是否存在,或者正常哈希算法中破坏数据的部分对于不可逆特性是否至关重要

这样的东西有什么用?好吧,想象一下,一个浏览器有一个应该从历史中排除的网站列表,比如NSFW网站。如果此列表未编码或使用系统中已知的密钥加密保存,则不仅浏览器可以读取,老板、妻子等也可以读取

如果网站地址以散列方式存储,则无法读取,但浏览器可以检查列表中是否存在网站

使用普通散列函数可能会导致误报,尽管可能性不大


我不是在构建浏览器,我不打算实际使用答案。我只是对加密之类的东西很好奇和感兴趣。

任何形式的无损公开加密都会忘记私钥。

任何形式的无损公开加密都会忘记私钥。

那么md5哈希呢?sha1散列?

那么md5散列呢?sha1散列?

我认为它不可能存在;如果您可以将任何内容放入其中并得到不同的结果,那么它就不可能是一个固定长度的字节数组,而且它将失去很多有用性


也许你要找的不是散列而是可逆加密?这应该是独一无二的。不会很快,但它将是独一无二的。

我认为它不可能存在;如果您可以将任何内容放入其中并得到不同的结果,那么它就不可能是一个固定长度的字节数组,而且它将失去很多有用性


也许你要找的不是散列而是可逆加密?这应该是独一无二的。不会很快,但会很独特。

好吧,任何带有密码的无损压缩机都可以工作


或者你可以用一些你知道的文字来输入你的信息。这会给你一些东西,只要输入。然后,您可以对结果运行某种无损压缩,这将使其更短。

好的,任何带有密码的无损压缩程序都可以工作


或者你可以用一些你知道的文字来输入你的信息。这会给你一些东西,只要输入。然后你可以对结果进行某种无损压缩,这会使结果更短。

你可以找到一个概率很低的哈希函数,但我认为所有这些函数都容易,您可以尝试使用具有较大输出的函数来最小化该概率

您可以找到发生概率较低的哈希函数,但我认为所有这些函数都倾向于,您可以尝试使用具有大尺寸输出的函数来最小化该概率

理论上,短于输入的输出是不可能的。这与皮江洞原理基本一致

您可以在丢弃私钥的情况下使用非对称加密。这样的话,从技术上讲,它是无损加密,但没有人能够轻易地将其反转。请注意,这比普通散列慢得多,并且输出将大于输入

但冲突的概率随着散列大小呈指数下降。一个好的256位散列对于所有实际用途来说都是无冲突的。我的意思是,用世界上所有的计算机进行数十亿年的哈希运算,几乎肯定不会产生冲突

您的扩展问题显示了两个问题

这样的东西有什么用?好吧,想象一下,一个浏览器有一个应该从历史中排除的网站列表,比如NSFW网站。如果此列表未编码或使用系统中已知的密钥加密保存,则不仅浏览器可以读取,老板、妻子等也可以读取

如果网站地址以散列方式存储,则无法读取,但浏览器可以检查列表中是否存在网站

在这个用例中,暴力是微不足道的。只需找到所有域/区域文件的列表。如果有一个好的列表可以在某处下载,也不会感到惊讶

使用普通散列函数可能会导致误报,尽管可能性不大

散列的冲突概率要低得多,特别是因为在这种情况下,没有攻击者试图引发冲突,而不是硬件错误的概率

所以我的结论是将一个秘密与一个缓慢的散列结合起来

byte[] secret=DeriveKeyFromPassword(pwd, salt, enough iterations for this to take perhaps a second)
然后,对于实际的散列,再次使用KDF组合机密和域
n名称。

理论上,输出比输入短是不可能的。这与皮江洞原理基本一致

您可以在丢弃私钥的情况下使用非对称加密。这样的话,从技术上讲,它是无损加密,但没有人能够轻易地将其反转。请注意,这比普通散列慢得多,并且输出将大于输入

但冲突的概率随着散列大小呈指数下降。一个好的256位散列对于所有实际用途来说都是无冲突的。我的意思是,用世界上所有的计算机进行数十亿年的哈希运算,几乎肯定不会产生冲突

您的扩展问题显示了两个问题

这样的东西有什么用?好吧,想象一下,一个浏览器有一个应该从历史中排除的网站列表,比如NSFW网站。如果此列表未编码或使用系统中已知的密钥加密保存,则不仅浏览器可以读取,老板、妻子等也可以读取

如果网站地址以散列方式存储,则无法读取,但浏览器可以检查列表中是否存在网站

在这个用例中,暴力是微不足道的。只需找到所有域/区域文件的列表。如果有一个好的列表可以在某处下载,也不会感到惊讶

使用普通散列函数可能会导致误报,尽管可能性不大

散列的冲突概率要低得多,特别是因为在这种情况下,没有攻击者试图引发冲突,而不是硬件错误的概率

所以我的结论是将一个秘密与一个缓慢的散列结合起来

byte[] secret=DeriveKeyFromPassword(pwd, salt, enough iterations for this to take perhaps a second)

然后,对于实际的散列,再次使用KDF组合机密和域名。

给出了散列的定义

加密散列函数是一种确定性过程,它接受任意数据块并返回固定大小的位字符串,即加密散列值,因此对数据的意外或有意更改将更改散列值


不,这在理论上是不可能的。散列值的固定长度通常小于它正在散列的数据,除非正在散列的数据小于散列的固定长度。它们总是会丢失数据,因此总是会发生冲突。如果冲突的风险很低,并且无法计算,则认为哈希函数是好的。

给定哈希的定义

加密散列函数是一种确定性过程,它接受任意数据块并返回固定大小的位字符串,即加密散列值,因此对数据的意外或有意更改将更改散列值


不,这在理论上是不可能的。散列值的固定长度通常小于它正在散列的数据,除非正在散列的数据小于散列的固定长度。它们总是会丢失数据,因此总是会发生冲突。如果冲突的风险很低,并且无法计算,则认为哈希函数是好的。

我编辑了这个问题。我需要能够多次获得相同的输出。那会有用的。我自己也应该想到这一点。*羞耻*:pI编辑了这个问题。我需要能够多次获得相同的输出。那会有用的。我自己也应该想到这一点,真丢脸:p@daniels、MD5和SHA1可能存在冲突,即两个不同的文件/字符串可能具有相同的哈希值。您可以通过在哈希比较中包含长度数据来缓解这种情况,但从理论上讲,仍然可能存在冲突。@CodeInChaos:哈希是否被破坏与冲突无关。会发生碰撞;它可能更可能发生在断开的散列中,其中要散列的数据具有一些相似性,但它仍然会发生。在大于256位的未断开的加密散列中发生冲突的概率对于几乎所有情况来说都足够低。硬件故障的概率要高得多,因此您不必担心发生随机冲突。唯一的问题是攻击者在破坏哈希算法后故意手工输入以产生冲突。@daniels、MD5和SHA1可能会发生冲突,即两个不同的文件/字符串可能具有相同的哈希值。您可以通过在哈希比较中包含长度数据来缓解这种情况,但从理论上讲,仍然可能存在冲突。@CodeInChaos:哈希是否被破坏与冲突无关。会发生碰撞;它可能更可能发生在断开的散列中,其中要散列的数据具有一些相似性,但它仍然会发生。在大于256位的未断开的加密散列中发生冲突的概率对于几乎所有情况来说都足够低。硬件故障的概率要高得多,因此您不必担心发生随机冲突。唯一的问题是攻击者故意手工输入以生成col
在他破坏了散列算法之后,莉森。哦,那不是真的;巴拿马、GOST和哈弗都输出256位,并且都有冲突问题。很明显,我说的是一个完整的加密散列。但是,如果他的密码被破坏,无论他是使用无损加密还是散列,OP都会有问题。我不会说暴力是微不足道的。所有站点的列表都会非常大,通过多次应用哈希函数或使用非常大的已知密钥,可以人为地使哈希函数变慢,这样暴力强制将非常慢,而单个查找仍然足够快。我同意,但在现实世界中,冲突的可能性可能很低。如果在中等级别的CPU上进行一次查找需要100毫秒左右的时间,比如合理的延迟,那么作为一个像样的图形卡的攻击者可能每秒尝试100次以上的哈希。这意味着他每天可以尝试10次以上的哈希运算。由于域名的受欢迎程度主要集中在相对较少的网站上,他应该能够在一天内测试所有重要的网站。我宁愿把我的安全性押在用户密码上,也不愿把两者结合起来。所有非对称算法都能在GPU上运行吗?哦,那不是真的;巴拿马、GOST和哈弗都输出256位,并且都有冲突问题。很明显,我说的是一个完整的加密散列。但是,如果他的密码被破坏,无论他是使用无损加密还是散列,OP都会有问题。我不会说暴力是微不足道的。所有站点的列表都会非常大,通过多次应用哈希函数或使用非常大的已知密钥,可以人为地使哈希函数变慢,这样暴力强制将非常慢,而单个查找仍然足够快。我同意,但在现实世界中,冲突的可能性可能很低。如果在中等级别的CPU上进行一次查找需要100毫秒左右的时间,比如合理的延迟,那么作为一个像样的图形卡的攻击者可能每秒尝试100次以上的哈希。这意味着他每天可以尝试10次以上的哈希运算。由于域名的受欢迎程度主要集中在相对较少的网站上,他应该能够在一天内测试所有重要的网站。我宁愿把我的安全性押在用户密码上,也不愿意把两者结合起来。所有的非对称算法都能在GPU上运行吗?好吧,我要求一种哈希,所以这个定义不适用。输出不需要固定长度,也不需要比输入小。好吧,我要求一种散列,所以这个定义不适用。输出不需要固定长度或小于输入。任何安全加密/哈希算法都将输出不可压缩的数据。如果没有,则不安全。您需要压缩输入而不是输出。任何安全加密/哈希算法都将输出不可压缩的数据。如果没有,它就不安全。你需要压缩输入而不是输出。