ECC 部分盲簽名方案驗證
問題
我的一個項目需要一個部分盲簽名方案,但在網際網路上找不到,所以我做了一個(我想)。
有沒有人可以驗證我的結果
演員
- Alice(簽名者,即銀行)
- Bob(請求者,即付款人)
- 賬單(驗證者,即收款人)
所有參與者都同意橢圓曲線參數:
Curve: y^2 = x^3 + a*x + b mod p Base point: P Order of base point: n
x
Alice 通過選擇範圍內的隨機值生成他的私鑰[1, n-1]
,然後她計算並發布Q = x*P
算法
Alice 記錄了 Bob 和 Bill 的賬戶餘額,Bob 想要向 Bill 付款。為了這個目的:
Bob 生成令牌消息
M = "This is 5 dollar Serial No. 111222333"
Bob 生成公共資訊消息
Z = "Nominal: 5, Currency: USD, Expiry date: 2018-01-01 12:00:00Z"
,Bob 對他的令牌消息進行雜湊處理,結果是
m = hash(M)
Bob 散列他的公共資訊消息
z = hash(Z)
Bob 生成隨機致盲因子
v = random()
Bob 隱藏了他的令牌消息
u = (m - v) mod n
Bob 發送
(u, Z)
給 AliceAlice 通過查看
Z = "Nominal: 5, Currency: USD, Expiry date: 2018-01-01 12:00:00Z"
看到 Bob 想從他的帳戶中收取 5 美元Alice 從 Bob 的賬戶中收取 5 美元,並
u
通過生成 pair 來盲目簽名(s', R')
為此,Alice 生成隨機值
r = random()
,用於保護她的私鑰x
然後 Alice 計算
s' = (x - r + u + hash(Z)) mod n = (x - r + u + z) mod n
和
R' = r * P
Alice 將結果
(s', R')
對發送給 Bob通過接收
(s', R')
Bob 將消息解鎖到(s, R)
中,這是按照以下步驟完成的:Bob 生成隨機揭盲因子
w = random()
然後 Bob 計算
s = (s' + w - m) mod n
然後 Bob 計算
R = R' + (m - w - v)*P
然後 Bob 通過向 Bill 發送元組來支付他的服務費用
(s, R, Z, M)
通過接收 Bob 的元組,
(s, R, Z, M)
Bill 驗證:令牌消息
M = "This is 5 dollar Serial No. 111222333"
公共資訊
Z = "Nominal: 5, Currency: USD, Expiry date: 2018-01-01 12:00:00Z"
(s, R)
通過檢查等式簽名s*P - Q + R = z*P + m*P
:從此
s = s' + w - m
也s
等於x - r + v + z + w
從此也等於which
R = R' + (m - w - v)P
又等於R``r*P + (m - w - v)*P``r*P + m*P - w*P - v*P
然後初始方程
s*P - Q + R = z*P + m*P
產生:
(x - r + v + z + w)*P - Q + (r*P + m*P - w*P - v*P) = z*P + m*P
這反過來產生:
x*P - r*P + v*P + z*P + w*P - Q + r*P + m*P - w*P - v*P = z*P + m*P
通過應用簡化我們得到:
z*P + m*P = z*P + m*P
14. 執行驗證檢查後,Bill 要求 Alice 將他從 Bob 收到的元組發送給他的帳戶,向他的帳戶添加 5 美元(s, R, Z, M)
15. 當愛麗絲收到(s, R, Z, M)
- 她驗證
Z = "Nominal: 5, Currency: USD, Expiry date: 2018-01-01 12:00:00Z"
- 她驗證 M =“這是 5 美元序列號 111222333”
- 她將 (111222333, 2018-01-01 12:00:00Z) 添加到她的過期令牌數據庫中
- 令牌將在 2018-01-01 12:00:00Z 後刪除,防止數據庫無限增長
Alice 能夠
(s, R, Z, M)
通過重複比爾所做的步驟來驗證她自己的簽名,儘管她無法追踪誰向比爾付款。這是真的,因為即使 Alices'
在簽名階段已經在她的數據庫中記錄了該組件,她也無法匹配它,因為在還款階段她將收到(s, R)
而不是,(s', R')
因此通過從記錄s'
中減去s
她將得到:s - s' = ((x - r + v + z + w) - (x - r + v + m + z) + m + z) mod n = = (x - r + v + z + w - x + r - v - m - z + m + z) mod n = = w mod n
愛麗絲無法發現
w
這是另一個實數範例: https ://dl.dropboxusercontent.com/u/51743054/PartiallyBlindSignatureExample.pdf
PS 以下論文中提供的方案似乎存在缺陷(在簽名階段,簽名者可能會將請求者身份數據嵌入到 h(z) 中,在驗證階段可能會恢復這些數據,因此驗證者可能會披露請求者的身份,如果簽名者和驗證者共享公共數據庫):
http://ijns.femto.com.tw/contents/ijns-v14-n6/ijns-2012-v14-n6-p316-319.pdf
我已經把那篇論文作為基礎工作並修復了(我認為)其中的問題,現在它不應該讓請求者匿名。
在沒有豐富經驗的情況下從頭開始設計這樣的簽名方案很可能會失敗並且非常危險(請參閱大量糟糕的論文被“可疑”的會議和期刊接受)。
您提出的方案
您的驗證關係是檢查是否: $ sP - Q + R \stackrel{?}{=} zP + mP $ 在哪裡 $ Q $ 是簽名者的公鑰,讓我們呼叫 $ hash $ 簡單地 $ h $ .
我只是快速瀏覽了一下,您有以下問題(注意您可以自由選擇 $ s $ 和 $ R $ ):
放 $ R:=Q $ , 任意選擇 $ M $ 和 $ Z $ 您的選擇,然後設置 $ s:= h(Z)+h(M) \bmod n $ 驗證關係成立。因此,您可以偽造任意簽名 $ M $ 和 $ Z $ 你的選擇。
好的,現在你可以說:“讓我們引入一個檢查 $ Q=R $ 以及是否 $ s $ 不是形式 $ h(Z)+h(M) \bmod n $ 以避免這個問題”。
但你可以任意“瞎” $ s $ 和 $ R $ 放 $ R=Q-aP $ 對於任意 $ a\in \mathbb{Z_n} $ 然後設置 $ s:= h(Z)+h(M)+a \bmod n $ . 請注意,您的驗證關係要求:
$$ sP - Q + R = zP + mP $$ 現在讓我們插入
$$ (h(Z)+h(M)+a)P - Q + (Q-aP) = h(Z)P+h(M)P=mP+zP $$ 這是一個有效的偽造,也完全破壞了你的計劃。現在你可以引入一個額外的檢查 $ s $ 和 $ R $ 不會那樣盲目。但我很確定(因為我只是快速瀏覽了一下)你會發現更多問題(這仍然是一種僅限密鑰的攻擊,為了實現不可偽造性,我們談到了針對選定消息攻擊的安全性)。
我只是想給你一個建議,即設計簽名方案(無論它們是標準簽名方案,還是盲人或部分盲人或其他什麼)是一門藝術,在你的情況下(對於一個項目),我認為最好的建議是簡單地依靠既定的計劃(見答案的底部)。如果您仍想設計簽名方案,請首先研究所需的安全屬性,然後考慮如何滿足它們(並且您還應該提供這些屬性成立的證明)。
您連結論文中的方法
您連結到的論文的作者似乎不知道如何定義盲簽名的公認安全模型,特別是盲屬性。
基本上,失明要求允許指定兩條消息的惡意簽名者 $ (M_0,M_1) $ 並且用誠實的接收者對兩條消息執行簽名過程無法決定簽名過程的執行順序。
現在,在您連結的論文中,簽名者可以輕鬆地為兩條消息這樣做:即,如果簽名者收到候選“盲消息” $ m_bQ $ (在哪裡 $ b $ 是 0 還是 1,他不知道,並且 $ m_b=H(M_b) $ ),然後簽名者只需檢查是否 $ H(M_0)Q $ 等於收到 $ m_bQ $ . 如果是這種情況,他會簽字 $ M_0 $ 在這個過程中和 $ M_1 $ 除此以外。因此,該方案不提供盲屬性。
實際上,他們似乎更想建立一個部分盲簽名方案,但該方案也不會滿足部分盲(原因同上)。
我什至沒有看該計劃的不可偽造性(他們稱之為不可偽造性),因為上述內容足以丟棄紙張。但是由於他們的模型看起來非常手工製作並且“證明”並不令人信服,我想它也可以被這個屬性打破。
現有的部分盲簽名方案
Abe 和 Okamoto在這篇論文中提出了一種被廣泛接受且相當標準的部分盲簽名方法(這也可以在橢圓曲線上實現)。這個(更多的理論興趣)和這個也被證明是安全的(在標準模型中與第一個相比),但依賴於配對友好的橢圓曲線。所以也許最容易實現的是第一個。