一種使用素數隱藏數據的新方法?
是否提出或研究了以下隱藏數據的方法?這種方法的效率或安全性如何?哪些應用程序可以使用這種方法?
數據將隱藏在一個數字中,該數字是兩個素數的乘積。一個素數包含隱藏數據,一個較大的素數表示數據的長度,使用連接構造如下。
$ p = p_0 \ || \ data \ || \ p_{end}\ \ $ 和 $ \ \ q = q_0 \ || \ marker \ || \ q_{end} $
在哪裡 $ p_0 $ 和 $ q_0 $ 是隨機的 $ single $ 非零數字 $ p_0 < q_0 $ , $ data $ 是一個數字 $ k $ (十進制)數字, $ marker $ 是一個隨機數 $ k-1 $ 非零數字後跟 $ 0 $ , 和 $ p_{end} $ 和 $ q_{end} $ 是隨機數 $ n-k-1 $ 位數。
編碼數據為 $ N = P \times Q $ 在哪裡 $ P $ 和 $ Q $ 是之後的下一個素數 $ p $ 和 $ q $ . $ n $ 被選擇得足夠大,使得a的因式分解 $ 2n $ -數字數字是不可行的,因此,連同選擇 $ p_{end} $ 和 $ q_{end} $ , 的建設 $ P $ 和 $ Q $ 不會導致 $ data $ 或者 $ marker $ 改變。
幾點評論:(1)雖然有一些限制 $ P $ 和 $ Q $ 是已知的,使用“部分資訊/已知位的分解”是不夠的。(2) 知道 $ P $ 和 $ Q $ ,以任何順序,都允許唯一地找到隱藏的數據。(3)該方法易於適應二進制。
例子: $ data $ 是 271828 與 $ k $ = 6. 為簡單起見 $ n $ = 12:
$ p = \mathtt {1 \underline {271828} 67213} $ , $ P = \mathtt {1 \underline {271828} 67221} \ \ $ 和 $ \ \ q=\mathtt {6 \underline{97811} \underline {\underline {0}}97478} $ , $ Q = \mathtt {6 \underline{97811} \underline {\underline {0}}97499} $
$ N = P \times Q = \mathtt {88749616158555602180279} $ .
編輯:數據可以是任何整數(零或更大)。為了強調它不必是素數,我將範例數據從 314159(素數)更改為 271828(複合數據)。
編輯(3 月 30 日):在描述中添加了“單一” $ p_0 $ 和 $ q_0 $ 強調每個 $ p_0 $ 和 $ q_0 $ 是單個非零數字。注意數據的大小( $ k $ ) 事先不知道,但由 $ marker $ . 此外,Coppersmith 最廣為人知的結果是,如果已知因子的一半位,則分解很容易。
我將把它作為一個潛在的承諾方案來研究(因為我想不出你會如何使用它)。
如您所知,鮑勃,承諾方案是愛麗絲擁有秘密的方案。她發布了對秘密的承諾(“承諾秘密”),然後,她“打開”承諾,揭示了秘密。
承諾方案中有兩個感興趣的安全屬性:
- 隱藏;看到承諾的鮑勃無法說出秘密是什麼(即使他有猜測)
- 捆綁; 當 Alice 打開承諾時,她必須將其打開到她在生成承諾時所考慮的值(也就是說,她不能在打開時將其打開到兩個不同的值中的任何一個)。
實際上,承諾方案既可以是完全隱藏的(也就是說,Bob 不可能獲得任何資訊,即使他擁有無限的計算能力)也可以是完全綁定的(也就是說,Alice 不可能打開以兩種不同的方式承諾);一個計劃不可能兩者兼而有之。
現在,有兩種標準的承諾方案:
- 基於雜湊的承諾,Alice 獲取秘密 $ S $ 和一個隨機值 $ R $ 並公佈承諾 $ \text{Hash}( S || R ) $ , 對於一個抗碰撞的散列函式 $ \text{Hash} $ ; 打開它,她發布 $ S $ 和 $ R $ . 事實證明這是計算綁定(基於雜湊的抗碰撞性,並假設 S 或 R 的長度是眾所周知的)和統計隱藏(假設 $ R $ 足夠長,並且是對散列函式的非標準但直覺的假設)。
- Pedersen 承諾,我們有兩個不同的發電機 $ g $ 和 $ h $ (具有未知關係)離散對數問題較難的某個組;承諾一個價值 $ S $ ,她選擇一個隨機值 $ R $ 並發表 $ g^Sh^R $ ; 打開它,她發布 $ S $ 和 $ R $ . 事實證明,這正在完善隱藏和計算綁定(可簡化為 DLog 問題)。
基於雜湊的承諾具有高效的實際優勢。Pedersen 承諾的優點是它們具有更好的可證明性質,並且它們也是零知識證明友好的;例如,如果 Alice 生成兩個承諾,她可以生成一個簡短的零知識證明,證明這兩個承諾是兩個相同的值(當然,假設它們是)。
現在,進入您的計劃:
- 至於綁定屬性,您完全綁定;愛麗絲只有一種方法可以打開秘密(假設鮑勃檢查所揭示的素數)。
- 至於隱藏屬性,乍一看似乎可以歸結為因式分解問題。然而,事情並沒有那麼簡單。攻擊者先驗地知道這些因素(例如,如果他猜到了這個秘密,他也猜到了 $ P $ 出現(沒有那麼多可能性),那麼他有兩個數字 $ P $ 並且知道非零數字在哪裡 $ Q $ 出現(以及零位))。雖然尚不清楚如何使用它來簡化分解,但這將是一個非標准假設。
評估這個方案,它並不可怕(只要秘密很短,攻擊者可用的額外資訊就不太可能被利用);另一方面,它也是低效的(生成素數是昂貴的;驗證揭示的 $ P $ 和 $ Q $ 價值(確保它們是主要的),雖然沒有那麼貴,但仍然不是太便宜)。而且,您將如何創建關於承諾值聲明的有效零知識證明也不是很明顯。
我將指出一些我看到的問題,這些可能是錯誤的,但我仍然覺得這很有趣
- 將數據設置為等於(或表示)質數並不總是那麼容易。給定一條加密為素數 1 的特定消息,是什麼阻止了另一條相同長度的消息加密為相同的素數。(可能是小消息空間?)
- 解密在這裡如何工作……
- 我在這裡沒有看到安全證明。對 RSA 的攻擊表明,在給定一定數量的位的情況下,您可以恢復素數。您可以對味精的長度進行蠻力攻擊,然後可能使用某種部分密鑰暴露攻擊
我是密碼學的新手,所以很可能我搞砸了這些假設之一,請隨時給我打電話,仍然祝賀這些有趣的想法!