【问题标题】:which hash functions are orthogonal to each other?哪些哈希函数相互正交?
【发布时间】:2014-03-11 15:57:28
【问题描述】:

我对多级数据完整性检查和纠正感兴趣。使用多个纠错码的地方(它们可以是 2 个相同类型的代码)。我的印象是,如果使用的 2 个哈希码相互正交,则使用 2 个代码的系统将获得最大的效率。

有哪些代码与哪些代码正交的列表?还是需要使用相同的散列函数,但参数或用法不同?

我希望第一级 ecc 将是一个 reed-solomon 代码,尽管我实际上无法控制第一个函数,因此我不能使用具有改进功能的单个代码。

请注意,我不关心加密安全性。

编辑:这不是重复

【问题讨论】:

  • @BlackVegetable 不,这是一个不同的问题,它本质上是在问正交哈希函数的定义是什么。我想要哪些哈希函数是正交的示例
  • @BlackVegetable 如果您要删除您对When are hash functions orthogonal to each other? 的评论,您是否也可以删除问题上的重复标记...?
  • 我不知道该怎么做。我会看看meta,看看是否有可能。对这一切感到抱歉。
  • 无法撤消标志。我带来的不便表示歉意。作为回报,我会尽力回答你的问题! (见:meta.stackexchange.com/a/206859/188241
  • 我在 askubuntu SE 网站上遇到了一个问题,该问题以某种方式删除了重复标记...也许它被其他人否决了...

标签: hash hash-collision error-correction hash-code-uniqueness reed-solomon


【解决方案1】:

我不确定是否可以枚举所有正交散列函数。但是,您只要求提供一些示例,因此我将尽力提供一些关于哪些属性似乎会导致正交散列函数的一些直觉。

来自a related question,这两个函数相互正交:

Domain: Reals --> Codomain: Reals
f(x) = x + 1
g(x) = x + 2

这是一个非常明显的案例。如果散列函数(两者)都是完美的散列函数,那么更容易确定正交性。请注意,术语“完美”是指数学意义上的,而不是指这些应该永远用作散列函数。

完美的散列函数满足正交性要求或多或少是微不足道的。只要函数是injective,它们就是完美的散列函数,因此是正交的。类似的例子:

Domain: Integers --> Codomain: Integers
f(x) = 2x
g(x) = 3x

在前一种情况下,这是一个单射函数,但不是bijective,因为在域中的每个元素映射到的codomain 中只有一个元素,但是codomain 中有许多元素没有映射到全部。这些对于完美的散列和正交性仍然是足够的。 (请注意,如果域/共域是实数,这将是双射。)

非单射函数更难分析。但是,如果一个函数是单射的而另一个不是,则它们总是不是正交的:

Domain: Reals --> Codomain: Reals
f(x) = e^x // Injective -- every x produces a unique value
g(x) = x^2 // Not injective -- every number other than 0 can be produced by two different x's

因此,一个技巧是知道一个函数是单射的,而另一个不是。但是,如果两者都不是单射的呢?除了蛮力之外,我目前不知道用于一般情况的算法来确定这一点。

Domain: Naturals --> Codomain: Naturals
j(x) = ceil(sqrt(x))
k(x) = ceil(x / 2)

这两个函数都不是单射的,在这种情况下,因为存在两个明显的非单射函数:ceilabs 与受限域相结合。 (在实践中,大多数散列函数不会有一个比整数更宽松的域。)测试值将显示j 将有非唯一的结果,而k 不会,反之亦然:

j(1) = ceil(sqrt(1)) = ceil(1) = 1
j(2) = ceil(sqrt(2)) = ceil(~1.41) = 2
k(1) = ceil(x / 2) = ceil(0.5) = 1
k(2) = ceil(x / 2) = ceil(1) = 1

但是这些函数呢?

Domain: Integers --> Codomain: Reals
m(x) = cos(x^3) % 117
n(x) = ceil(e^x)

在这些情况下,这两个函数都不是单射的(由于模数和 ceil),但是它们何时发生碰撞?更重要的是,对于 x 的哪些值的元组,它们都发生了冲突?这些问题很难回答。我怀疑它们不是正交的,但如果没有具体的反例,我不确定我能否证明这一点。

当然,这些不是您可能遇到的唯一哈希函数。所以确定正交性的诀窍是首先看看它们是否都是单射的。如果是这样,它们是正交的。其次,看看 one 是否是单射的。如果是这样,它们不是正交的。第三,看看你是否能看到导致它们不是单射的函数片段,看看你是否能确定它的周期或特殊情况(例如 x=0)并尝试提出反例。第四,访问math-stack-exchange,希望有人能告诉你他们打破正交性的地方,或者证明他们没有。

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 2012-05-03
    • 2012-08-10
    • 2015-06-05
    • 2015-01-26
    • 2012-06-04
    • 1970-01-01
    • 2016-02-10
    • 2019-10-30
    相关资源
    最近更新 更多