顯示直到第 n 條消息的所有資訊
有沒有辦法生成一系列密鑰,這些密鑰具有暴露這些密鑰的屬性將顯示所有以前的密鑰,但沒有未來的密鑰?
我正在考慮一個每天發送加密消息的應用程序,有時我想在任何時間點向其他方透露所有過去消息的內容,但不透露任何未來消息。
一種可能的方法是對一些數據
x
時間進行散列,然後將最終散列用於第一條消息,將x-1
第 th 散列用作第二條消息的鍵,將第x-2
th 散列用作第二條消息的鍵,依此類推。向任何一方透露x-n
密鑰允許他們對其進行多次散列以獲得所有密鑰,x
並且x-n
無法訪問任何以後的密鑰。但這限制了應用程序的消息總數,並且需要事先完成大量工作。也許有更好的方法?
有沒有辦法生成一系列密鑰,這些密鑰具有暴露這些密鑰的屬性將顯示所有以前的密鑰,但沒有未來的密鑰?
一種可能性:選擇一個難以考慮的值 $ n = pq $ ; 發布價值 $ n $ (或將其包含在每天的“密鑰”中),並保持分解的秘密。如果你選擇它會讓事情變得更容易 $ p \equiv q \equiv 3 \pmod 4 $
然後,選擇一個隨機二次殘差 $ r_0 $ (您可以通過選擇一個隨機值來完成 $ t $ 和計算 $ r_0 = t^2 \bmod n $ )
然後,為了每一天的秘密 $ r_i $ , 你可以計算第二天的秘密 $ r_{i+1} = \sqrt{r_i} \bmod n $ (即模平方根);有四個這樣的平方根;你會想要一個二次殘差。
這實際上比聽起來容易。如果你接受我的建議 $ p \equiv q \equiv 3 \pmod 4 $ ,那麼您需要做的就是計算:
$$ r_{i+1} \mod p = r_i^{(p+1)/4} \mod p $$ $$ r_{i+1} \mod q = r_i^{(q+1)/4} \mod q $$ 並結合 $ r_{i+1} \mod p $ 和 $ r_{i+1} \mod q $ 使用 CRT 重建 $ r_{i+1} $
這解決了您的問題,如:
- 計算下一個鍵和因式分解一樣困難 $ n $
- 計算以前的密鑰很容易,因為 $ r_{i-1} = r_i^2 \bmod n $
- 您可以根據需要計算下一個鍵