Encryption 如何安全地消除在客户端加密的重复文件';是哪一方?

Encryption 如何安全地消除在客户端加密的重复文件';是哪一方?,encryption,Encryption,的主张是以固定的费用提供无限的存储空间 根据一份声明,Bitcasa使用客户端收敛加密。因此,任何未加密的数据都不会到达服务器。使用收敛加密,加密密钥从要加密的源数据派生 基本上,Bitcasa使用散列函数来识别不同用户上传的相同文件,只在其服务器上存储一次 我想知道,提供商如何确保没有两个不同的文件映射到同一个加密文件或同一个加密数据流,因为它们不是 技术问题:我必须实现什么,这样才可能永远不会发生这种冲突。大多数重复数据消除方案都假设哈希冲突不太可能发生,因此可以忽略它们。这允许客户端跳过重

的主张是以固定的费用提供无限的存储空间

根据一份声明,Bitcasa使用客户端收敛加密。因此,任何未加密的数据都不会到达服务器。使用收敛加密,加密密钥从要加密的源数据派生

基本上,Bitcasa使用散列函数来识别不同用户上传的相同文件,只在其服务器上存储一次

我想知道,提供商如何确保没有两个不同的文件映射到同一个加密文件或同一个加密数据流,因为它们不是


技术问题:我必须实现什么,这样才可能永远不会发生这种冲突。

大多数重复数据消除方案都假设哈希冲突不太可能发生,因此可以忽略它们。这允许客户端跳过重新加载已经存在的数据。当您有两个具有相同哈希的文件时,它确实会崩溃,但这不太可能是偶然发生的(您确实选择了一个安全的哈希函数来防止人们故意这样做,对吗?)


如果您坚持绝对确定,所有客户端都必须重新加载其数据(即使数据已经在服务器上),并且一旦重新加载该数据,您必须检查它是否与当前的数据相同。如果不是,您需要选择一个新ID,而不是使用散列(并发出警报,在SHA1中发现冲突!)

大多数重复数据消除方案都假设散列冲突不太可能发生,因此可以忽略它们。这允许客户端跳过重新加载已经存在的数据。当您有两个具有相同哈希的文件时,它确实会崩溃,但这不太可能是偶然发生的(您确实选择了一个安全的哈希函数来防止人们故意这样做,对吗?)


如果您坚持绝对确定,所有客户端都必须重新加载其数据(即使数据已经在服务器上),并且一旦重新加载该数据,您必须检查它是否与当前的数据相同。如果不是,则需要选择一个新ID,而不是使用哈希(并发出警报,表示在SHA1中发现了冲突!)

使用多个哈希函数也可以大大减少冲突的机会。现在很容易找到MD5冲突,但要找到MD5和sha1中同时发生冲突的两个文件要困难得多,更不用说MD5+sha1+sha256+等等了。@Marc,与其临时混合散列函数,不如从一开始就选择一个更安全的函数,比如SHA512(或者,一旦标准化,SHA-3)广度防御——假设SHA-3(如果/当它被标准化)也可以被完全破坏,这并不是不合理的。通过使用多个散列,如果你把所有的鸡蛋都放进一个破碎的散列的篮子里,你仍然可以得到完全没有的安全裕度。但是,是的,从一个好的(到目前为止)完整的散列开始仍然是一个好主意。我只是想确认,还没有发明任何魔法函数,这在这里可能会有所帮助…@SteAp它必须是一个扭曲现实的魔法函数才能战胜:如果函数输出的比特数少于输入的比特数,则必须存在潜在的冲突。使用多个哈希函数也可以大大减少冲突的机会。现在很容易找到MD5冲突,但要找到MD5和sha1中同时发生冲突的两个文件要困难得多,更不用说MD5+sha1+sha256+等等了。@Marc,与其临时混合散列函数,不如从一开始就选择一个更安全的函数,比如SHA512(或者,一旦标准化,SHA-3)广度防御——假设SHA-3(如果/当它被标准化)也可以被完全破坏,这并不是不合理的。通过使用多个散列,如果你把所有的鸡蛋都放进一个破碎的散列的篮子里,你仍然可以得到完全没有的安全裕度。但是,是的,从一个好的(到目前为止)完整的散列开始仍然是一个好主意。我只是想确认,没有魔法函数被发明出来,这在这里可能会有所帮助…@SteAp它必须是一个扭曲现实的魔法函数才能击败:如果函数输出的比特数少于输入的比特数,那么潜在的冲突必然存在。