一種實用的年齡證明算法
我是名單上的新手,是密碼學的外行,但也是一位稱職的程序員。請為我可以實現的實用算法尋求您的幫助。
問題
讓證明人
P
持有包含出生日期欄位的身份證件D
,例如護照dob
。驗證者
V
想要檢查:
- 我拿著文件
- 那
D.dob
就是>=
<some date>
一切都沒有
P
暴露D
或V
信任P
。謝謝和問候 d.
這是使用 RSA 作為原語的解決方案。可能有一個基於橢圓曲線的變體。雖然也許不是。RSA 非常適合這種東西。
協議
政府工作人員格蕾絲給了證明人保羅一份身份證件。文件欄位之一是年齡門檻值證明值。這是鮑勃身份文件(例如:姓名、圖片等)的一些公共欄位上的標準 RSA 簽名,Paul 將使用它來證明他是 Paul。
代替使用標準 RSA 簽名算法來生成簽名,Grace 在執行操作時使用私有指數的倍數。這相當於多次應用私有操作。
age_proof=sig^(d*age) mod N
為了驗證這個簽名,我們必須應用公共操作
age
時間來取回原始簽名值。
sig=age_proof^(e*age) mod N
注意
sig
,e
和 N 對驗證者來說是已知的,age
並且age_proof
是未知的。假設保羅是 35 歲。如果愛麗絲想讓保羅證明他至少 20 歲,保羅首先對他的年齡值證明執行 15 次公共 RSA 操作。他將此值傳遞給 Alice,Alice 執行額外的 20 次冪運算並取回原始簽名。
這可以看作是一個簽名鏈。Grace 通過對 Bob 的簽名值重複應用私有操作創建了一個簽名值鏈,該鏈可以向前遍歷以獲得簽名值。
系統提供什麼
Paul 有一個整數
x
Grace 為他提供了一個證明值Px
愛麗絲要求保羅證明它
x
大於一個界限y
- 愛麗絲給保羅
y
- Paul 應用
x-y
公共操作來降級Px
為Py
- 保羅給
Py
愛麗絲- 愛麗絲應用
y
公共操作將關於已簽名事物的某些數據的簽名降級Py
為P0
哪個簽名(EG:誰擁有證明。)年齡範圍證明
更實用的年齡證明系統將使用兩個數字。這些數字將以天或小時為單位,並且是所有者的出生數據與遠在過去的日期(例如公元 1900 年)和遠在未來的日期(公元 2200 年)之間的差異
第一個數字,參考過去的日期證明年輕。這個數字越大,出生日期越近。
第二個數字,指的是未來的日期,證明了舊的。這個數字越大,出生日期越早,某人的年齡越大。
這避免了隨著持卡人年齡的增長而需要重新發行或更新卡。年輕的證明對於想要實施青年折扣的企業很有用。