One-Way-Function

單向蓄能器的缺點?

  • April 12, 2014

單向累加器建立在(準)交換單向函式之上。對於準交換性,我指的是以下屬性:

為了F:X×是→X $ f : X \times Y \to X $ , 確實F(F(X,是1),是2)=F(F(X,是2),是1) $ f(f(x, y_1), y_2) = f(f(x, y_2), y_1) $ .

儘管累加器看起來像是一個非常有用的密碼建構塊,但我在實際應用中並不經常看到它們(實際上我只能想到 Zerocoin)。我懷疑這是因為該方案有某些缺點。

我想知道這些缺點是什麼(如果這確實是原因):是功能F $ f $ 在例如方面很弱。抗碰撞,是不是不夠高效……?


我所知道的累加器(注意:我對它們了解不多,所以這不多說),似乎是基於數論的(與傳統的雜湊函式不同)。這使他們慢了很多。

例如,維基百科描述了以下功能:

一個簡單的例子是大合數如何累積它們的素因數,因為目前對合數進行因式分解是不切實際的,但相對容易找到一個產品,因此檢查一個特定的素數是否是因子之一。可以簡單地通過分別乘以或因式分解數字來將新成員添加到因子集或從中減去。更實用的累加器使用準交換雜湊函式,其中累加器的大小(位數)不隨成員數增長。

正如他們所提到的,由於輸出值的大小,這顯然是不切實際的。

我見過的另一個例子是F(X,是)=X是(反對n) $ f(x, y) = x^y \pmod n $ 在哪裡n=pq $ n = pq $ (和p $ p $ 和q $ q $ 兩個安全素數)。即使這沒有維基百科範例的問題,它仍然不是很有效(即使您可以使用平方和乘法方法進行求冪)。

加密累加器的一個優點以及使用它們的實際原因是,由於準交換性,您可以計算累加器中值的成員資格的見證,其中累加器和見證的大小是恆定的。

說你有一套是={是1,是2,是3} $ Y={y_1,y_2,y_3} $ 並將累加器計算為一種CC=F(F(F(X,是1),是2),是3) $ acc=f(f(f(x,y_1),y_2),y_3) $ 你想計算一個價值的見證人說是2 $ y_2 $ ,那麼通過準交換性,你的見證人的價值是在一世噸是2=F(F(X,是1),是3) $ wit_{y_2} = f(f(x,y_1),y_3) $ 你可以檢查給定是2 $ y_2 $ 和在一世噸是2 $ wit_{y_2} $ 無論是2 $ y_2 $ 在蓄能器中一種CC $ acc $ , 你可以檢查是否一種CC=F(在一世噸是2,是3) $ acc=f(wit_{y_2},y_3) $ 持有。

此外,現有的累加器方案(CL02C+09N05)帶有累加器成員資格的零知識證明(您不必透露值是2 $ y_2 $ 和證人在一世噸是2 $ wit_{y_2} $ 直接,但您提供了這樣一對知識的零知識證明——這使得它們對隱私保護應用程序具有吸引力)。這樣的累加器通常也是動態的,即,如果累加器被更新,則允許在公眾中更新見證人。此外,還有所謂的通用累加器,它還允許為累加集中某個值的非成員生成見證(參見A+09L+07)。

所有已知的高效累加器都基於數論假設,但我不會說它們效率低下。請注意,在您的上一個 RSA 範例中,成員資格檢查需要一次冪運算,這並不是非常昂貴。

是函式 f 弱,例如。抗碰撞,是不是不夠高效……?

對於安全的累加器,需要無衝突性,即,在計算上為未在累加器中累積的某些值找到見證是不可行的。對於要求您只累積素數的 RSA 累加器(因此您必須使用某些確定性算法將您的值映射到素數)。否則,您可以將您的值分解為兩個因素,並將一個取冪到您的見證上,並提供第二個作為要檢查的值,並且檢查將起作用。如果你取素數,這被排除在外。然而,其他基於安全配對的累加器不會遇到這個問題。

累加器用於各種目的,例如時間戳(原始應用程序)、成員資格測試、分佈式簽名、可編輯和可清理的簽名以及用於撤銷組簽名和匿名憑證系統。

有一些基於布隆過濾器的累加器結構(參見 Nyberg,Fast Accumulated hasing,FSE 1996),但它們相當不切實際(但不依賴於數論假設)。

引用自:https://crypto.stackexchange.com/questions/15548