Signature

一種實用的年齡證明算法

  • May 17, 2018

我是名單上的新手,是密碼學的外行,但也是一位稱職的程序員。請為我可以實現的實用算法尋求您的幫助。

問題

讓證明人P持有包含出生日期欄位的身份證件D,例如護照dob

驗證者V想要檢查:

  1. 我拿著文件
  2. D.dob就是>= <some date>

一切都沒有P暴露DV信任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公共操作來降級PxPy
  • 保羅給Py愛麗絲
  • 愛麗絲應用y公共操作將關於已簽名事物的某些數據的簽名降級PyP0哪個簽名(EG:誰擁有證明。)

年齡範圍證明

更實用的年齡證明系統將使用兩個數字。這些數字將以天或小時為單位,並且是所有者的出生數據與遠在過去的日期(例如公元 1900 年)和遠在未來的日期(公元 2200 年)之間的差異

第一個數字,參考過去的日期證明年輕。這個數字越大,出生日期越近。

第二個數字,指的是未來的日期,證明了舊的。這個數字越大,出生日期越早,某人的年齡越大。

這避免了隨著持卡人年齡的增長而需要重新發行或更新卡。年輕的證明對於想要實施青年折扣的企業很有用。

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