數字簽名在數字契約中包含不便公開的敏感信息時,如何進行有效的簽名?簽名時看不到信息明文,日後出現糾紛該如何追究維權?連簽名者都看不到數據信息,如何支持有效的監管介入?其背後的盲簽名技術和其他簽名技術相比,有何過人之處?
在越來越重視隱私保護的數字化經濟大背景下,對用戶數據的隱私保護要求也日益提高。甚至在一些涉及敏感數據的場景中,用戶向認證者提供待認證的數據,認證者都不能觀其明文。
例如,關鍵事務決議相關的電子投票系統可能要求投票認證者在不知道每張選票意向的條件下,對每張選票進行認證,排除未授權投票者的選票。這需要保護選票意向的隱私性,又要驗證選票意向明文的有效性,看起來是一項不可能的任務。
經典數字簽名技術,需要獲得數據明文,才能進行簽名和驗證,所以無法直接應用。為解決上述問題,盲簽名技術應運而生。盲簽名究竟如何在盲化數據明文之後,依舊保持數字簽名的可驗證性?盲簽名可以支持哪些典型的應用場景,且看本文一一解析。
盲簽名的盲化性
盲簽名技術設計的核心在於盲化待簽名的數據,對應的機制在傳統紙質簽名中也有類似的存在。
最典型的示例便是保密信封,其大致原理如下:
第一步:將保護敏感數據的文件放進信封,在待簽名區域上方放入一張復寫紙,而後密封信封。這樣一來,任何人不能透過信封觀察信封內文件的具體內容。第二步:將密封的信封提交給簽名者簽名,簽名過程中,信封上的簽名可以透過複寫紙簽到文件上。第三步:使用者打開信封,取出的已簽名文件,任意第三方可以認證其簽名的有效性。
類似地,在使用盲簽名中,用戶通過技術手段對原始數據進行盲化,然後將盲化後的數據交給簽名者簽名,獲得盲簽名後再解盲,便得到了關於原始數據的有效數字簽名。
盲簽名技術的核心機制是盲化和解盲。盲化是指對原始數據添加隨機性數據,隱匿原始數據明文。解盲是指移除隨機性數據,將盲簽名恢復為可驗證的簽名。
由此,盲簽名在經典數字簽名的基礎上,新增了以下重要特性:
盲化性:簽名者難以通過盲化後的待簽數據,反推出原始數據的明文。不可追踪性:簽名者之前是對盲化後的待簽數據簽名,但使用者獲取該盲簽名後,會進行解盲處理,得到對應原始數據的另一個不同的簽名,因此簽名者無法對這一對簽名進行關聯和追踪。
回到之前提到的電子投票系統,上述特性可以很好地滿足對應的隱私需求。具體操作時,投票者先對選票進行盲化,投票認證者僅能對盲化後的選票進行簽名認證,無法知曉投票者選票的具體內容;後續投票者將盲簽名解盲,投票認證者也無法追踪投票者的投票簽名。據此,保護選票意向隱私性和驗證選票意向明文有效性的需求得以同時滿足。
值得注意的是,簽名者對盲化後待簽數據進行簽名獲得盲簽名的過程,與對空白支票先進行簽名,然後允許使用者任意改寫支票內容的過程大不同。一般情況下,盲簽名一旦簽發,其認證的原始數據是不能任意改變的,即解盲之後獲得的簽名,僅對盲化前的原始數據有效。
由此可見,盲化和解盲的構造是盲簽名有效性的關鍵,具體如何設計這兩個關鍵過程,常用的擴展有哪些,我們在下一節中繼續展開。
盲簽名的構造和擴展
盲簽名的構造
盲簽名的構造過程可以看作是經典數字簽名流程的一類通用擴展,通過引入
盲化因子和盲化算法,額外實現了簽名的盲化和解盲步驟,其核心流程如下:
盲化數據:通過引入隨機數作為盲化因子blinding_factor,將原始待簽名的數據進行盲化處理。
簽名數據:利用私鑰將盲化的數據進行簽名。
解盲簽名:利用盲化數據階段的盲化因子將盲簽名解盲。
驗證簽名:利用公鑰驗證簽名。
現有的大多數經典數字簽名算法,都可以較為方便地構造出對應的盲簽名實現,比較典型的實現有RSA盲簽名、Schnorr盲簽名、DSA盲簽名等。
相比上一論中介紹的門限簽名(參見第17論),盲簽名沒有復雜的密鑰生成和協商問題,也不需要多方協同才能完成簽名,其性能與經典數字簽名相比並無太大區別。
盲簽名的擴展
盲簽名的不可追踪性使得簽名者很大程度上失去了對簽名的控制權,如果出現用戶濫用簽名的情況,簽名者很難追究維權,這在不少業務場景中是難以接受的,因此時常需要對基礎的算法流程進行擴展。
在諸多擴展中,最常見的擴展之一便是公平盲簽名方案,其主要設計目標是允許簽名者在出現糾紛時,能夠通過以監管為代表的可信第三方還原出請求籤名的用戶身份和其他相關信息。
具體實現方式是引入一個可信第三方,通過可信第三方建立一種對簽名的追踪機制。用戶將待簽名的原始數據和盲化後的數據首先發給可信第三方進行認證和登記,然後將盲化的數據和認證的數據發送給簽名者進行驗證,驗證通過後進行盲簽名,並保存盲化的數據。
後續如果需要進行簽名追踪,簽名者發送盲化的數據給可信第三方進行查詢,獲取用戶的原始簽名數據和身份。
相比直接使用會暴露待簽名原始數據的經典數字簽名,公平盲簽名實現了一定程度上的
隱私數據訪問權限隔離:
簽名者只能看到用戶身份,不能看到待簽名的原始數據明文。只有當可信第三方和簽名者聯合之後,才可以將原始數據明文和用戶身份關聯起來。
除了公平盲簽名之外,另一類常見的擴展是部分盲簽名,即分離認證數據和隱私數據,只盲化需要保護的隱私數據,其典型的應用是網絡流量的欺詐檢測。
總體而言,盲簽名的構造支持較為通用的擴展需求。在實際業務應用中,根據具體的隱私保護需求,一般都可以自由選擇數據進行定向盲化,並在必要時引入監管所需的解盲機制,控制盲簽名被濫用的風險。
盲簽名的應用賞析
在盲簽名的諸多應用中,較為知名的莫過於電子現金。現實的電子現金業務會涉及復雜的流程設計,不便於體現盲簽名的作用。所以,下面以一個經典的教科書示例,來展示基於盲簽名的應用設計和使用注意事項。
在本例中,目標是構建一個與傳統紙幣功能相當的電子現金系統E-Cash,其核心需求如下:
貨幣價值性:電子現金是代表一定價值的數字符號,需要具備銀行的授權信用,並提供相關實體現金支持。可交換性:電子現金相比實體現金,其優勢在於更方便交換、流動。電子現金與電子現金之間可以流動,電子現金與實體現金之間可以兌換。防偽與不可複制性:每一張電子現金均需要經過銀行認證,不能任意生成,而且要求不能將已有的電子現金復制出多個可用的電子現金,防止重複使用。匿名性:電子現金不能與用戶的身份進行綁定,保護用戶使用電子現金的隱私性。
針對E-Cash電子現金系統的各項業務流程,可以基於盲簽名技術,給出以下應用設計:
用戶開戶:在運行E-Cash電子現金系統的銀行,用戶註冊一個傳統的銀行資金賬戶和一個電子現金賬戶,並在銀行資金賬戶中存入一定量的資金。電子現金發行:用戶在銀行的錢包客戶端生成一個隨機序列號,並設置申請的電子現金面額,這里為了簡化描述,假定所有任意序列號所代表的的面額相同。而後用戶將隨機序列號進行盲化,再將電子現金發送給銀行進行盲簽名。銀行無法知道用戶電子現金的序列號,卻能將簽發的電子現金發到用戶的電子現金賬戶。電子現金支付:用戶A將一張電子現金支付給用戶B,用戶A在支付前需要解盲電子現金,再發送給用戶B。用戶B收到電子現金後進行簽名驗證,驗證成功後將電子現金的序列號發送給銀行。銀行查詢該序列號,如查詢到該序列號已存在,代表該電子現金已花費,用戶A此次支付失敗。如未查詢到,則將序列號存儲下來,用戶A此次電子現金花費成功,銀行根據之前約定的序列號代表的面額,將收到款項計入用戶B的賬戶中。
以上設計中,盲簽名的使用讓電子現金實現了與傳統紙幣同等的匿名性。用戶只有在經過銀行認證之後才能獲得電子現金,但銀行後續無法將使用解盲後的電子現金的用戶身份與當初發行的盲化電子現金關聯起來。
我們也可以進一步用公平盲簽名替換基礎盲簽名方案,將監管者引入電子現金系統,實現可控匿名的效果,為追究洗錢等犯罪活動提供有力的技術手段。
盲簽名的使用有很強的靈活性,在使用和設計基於盲簽名的應用時,分清角色進行針對性設計是用好盲簽名的重要前提,務必要釐清不同角色的訪問權限,想清楚盲化的數據是針對哪個角色、對哪些角色展現的數據不能盲化等問題。
正是:業務涉密契約禁明示,盲化簽名可簽不可見!
在隱私保護要求趨嚴,隱私數據保護立法日益完善的商業環境下,盲簽名技術提供了一種獨特的隱私數據保護手段。對於關鍵隱私數據,盲簽名既可以實現簽名認證,又可以對其數據內容進行隱匿保護,還可以選擇性地提供監管追溯支持,在現實業務場景中具有重要的實踐價值。
至此,密碼學數字簽名系列分享已近尾聲,對於之前介紹的數字簽名技術,其驗證過程大多是逐一進行的。然而,對於大數據場景中的海量隱私數據,如果需要對海量的數字簽名進行一一驗證,不免會帶來巨大的系統負擔,有時甚至會影響業務方的決策。
為了滿足高性能要求,校驗數據有效性的數字簽名可能被迫捨棄。有沒有更有效的批量簽名驗證技術,使得僅需一次驗證計算,便可完成多個簽名的效驗?技術上有何挑戰?欲知詳情,敬請關注下文分解。