好久好久沒(méi)有寫B(tài)log了萝衩,最近在忙我的論文,題目是一個(gè)基于區(qū)塊鏈的環(huán)簽名投票系統(tǒng)趾疚。
聽(tīng)著名字挺繞的缨历,實(shí)際上也是挺繞的,我做這個(gè)題目實(shí)際上是將三個(gè)學(xué)術(shù)領(lǐng)域的東西放在了一起:
- 電子投票 (e-voting) 屬于密碼學(xué)
- 區(qū)塊鏈(blockchain) 屬于密碼學(xué)的應(yīng)用
- 環(huán)簽名(ring-signature) 屬于密碼學(xué)
如果對(duì)以上三個(gè)概念無(wú)任何了解糙麦,基本上就告別理解我做的東西了辛孵。這個(gè)項(xiàng)目目前處于私有項(xiàng)目狀態(tài)之中,由于存在畢業(yè)設(shè)計(jì)可能會(huì)代碼查重的問(wèn)題赡磅,在九月初魄缚,將會(huì)對(duì)本項(xiàng)目徹底開(kāi)源。
理念
電子投票?
實(shí)際上冶匹,這個(gè)學(xué)術(shù)命題屬于電子投票方向的习劫,在電子投票學(xué)術(shù)方向上屬于創(chuàng)新型,在區(qū)塊鏈上屬于應(yīng)用型嚼隘,在談及這些問(wèn)題之前诽里,得先說(shuō)說(shuō)學(xué)術(shù)上的電子投票的一些概念:
隱私性:
- 選票保密性 (BP): 任何攻擊者都無(wú)法把用戶所投的票和投票者的身份聯(lián)系起來(lái)。
- 無(wú)收據(jù)性 (RF): 投票者在投票后不能證明他是怎么投票的飞蛹。系統(tǒng)不允許投票者在投票后證明這些谤狡。
- 不可強(qiáng)制性 (CR): 任何攻擊者都無(wú)法強(qiáng)制用戶生成自己不想投的票據(jù)。 攻擊者不會(huì)強(qiáng)迫選民得到相應(yīng)的收據(jù)以供強(qiáng)迫者檢查桩皿。
可驗(yàn)證性:
- 個(gè)體可驗(yàn)證性:每個(gè)投票者可以驗(yàn)證自己的投票是不是倍正確計(jì)入所有投票豌汇。
- 全局驗(yàn)證性:任何投票者都可以驗(yàn)證其他投票者所投票的合法性。
不可重投性:
不可重投性指的是泄隔,任何投票者無(wú)法對(duì)相同的消息進(jìn)行兩次投票拒贱。
公平性:
公平性指的是,任何人都無(wú)法提前知道選票的結(jié)果佛嬉,以及無(wú)法影響選票的結(jié)果逻澳。
其實(shí)還有很多很多概念,具體可以參考引用中的第一個(gè)論文暖呕。
實(shí)際上斜做,隱私性和可驗(yàn)證性在一定程度上是互相矛盾的,保障可驗(yàn)證性的情況下就可能無(wú)法保證隱私湾揽,我們?cè)陔娮油镀钡姆矫娴哪繕?biāo)是盡可能的保障以上的目標(biāo)瓤逼。
所以,設(shè)計(jì)一個(gè)系統(tǒng)是從隱私性和可驗(yàn)證性的角度上出發(fā)的库物,這也就解釋了霸旗,為什么用區(qū)塊鏈,為什么用環(huán)簽名戚揭。
為什么用區(qū)塊鏈
區(qū)塊鏈?zhǔn)鞘裁从崭妫繀^(qū)塊鏈可以理解為“分布式公共賬本”,按照計(jì)算機(jī)的角度上民晒,如果你對(duì)區(qū)塊鏈一竅不通精居,你可以理解為一個(gè)可 增加、查找 卻不能修改潜必、刪除的 分布式實(shí)時(shí)數(shù)據(jù)庫(kù)靴姿。而比特幣中的交易信息就是存在這個(gè)數(shù)據(jù)庫(kù)之中的。
如果你還是不理解磁滚,請(qǐng)千萬(wàn)不要到互聯(lián)網(wǎng)上搜索什么是比特幣空猜、比特幣挖礦原理、什么是區(qū)塊鏈,只會(huì)讓你更加疑惑辈毯,他們?cè)噲D把區(qū)塊鏈描述的非常高大上坝疼,迷惑你,并且告訴外人谆沃,這是很高大上的東西钝凶,其實(shí)不是,如果你真正研究過(guò)區(qū)塊鏈的協(xié)議唁影,你會(huì)覺(jué)得其實(shí)不是那么回事耕陷。在此,對(duì)于那些故作玄虛的文章据沈,我想引用《LaTeX新人教程哟沫,30分鐘從完全陌生到基本入門》文章所說(shuō)的一句話表達(dá)我的心情:
我要嚴(yán)厲警告和強(qiáng)烈聲討那些自以為是advanced LaTeX user的人。請(qǐng)你們不要為了自己那一點(diǎn)可憐可悲的虛榮心锌介,去刻意渲染LaTeX有多么高端多么不容易學(xué)習(xí)嗜诀,這和孔乙己炫耀茴香豆的茴字有四種寫法有什么區(qū)別么?混賬孔祸!LaTeX到底有多“難”你們自己清楚好么隆敢?
所以,我附了一篇論文[3]崔慧,不過(guò)是英文版的拂蝎,但是都是純白話口語(yǔ)講述到底什么是區(qū)塊鏈,比特幣的挖礦原理惶室,實(shí)際上是非常淺顯易懂的温自。如果有時(shí)間,恰當(dāng)?shù)臅r(shí)候皇钞,我也可以翻譯成中文悼泌。
世界上第一個(gè)區(qū)塊鏈?zhǔn)潜忍貛艅?chuàng)造的,比特幣需要區(qū)塊鏈才能夠叫做區(qū)塊鏈鹅士,為什么券躁?
因?yàn)樽鳛椤柏泿拧俺涂樱罡镜拇嬖诘囊饬x是什么掉盅?
證明資產(chǎn)?自己是富二代以舒?不不不趾痘,不是的。
根本意義實(shí)際上是交易蔓钟,人類社會(huì)永票,有了交易,才有了貨幣,貨幣是一般等價(jià)物侣集,這個(gè)我們?cè)谥袑W(xué)都學(xué)過(guò)键俱。
那么作為一種貨幣,貨幣是要流通的世分,如果顧客買了商家的東西编振,是不是要顧客給商家付款呀?天經(jīng)地義的臭埋。
這個(gè)過(guò)程就是交易踪央,那么,如何證明顧客已經(jīng)把錢付給了商家瓢阴?
在現(xiàn)實(shí)生活中畅蹂,太簡(jiǎn)單了,根本不用證明荣恐,顧客直接把錢給商家就行了液斜。
但是,如果顧客用銀行卡或者支付寶呢募胃?
好旗唁!我們的概念來(lái)了,這個(gè)概念叫 賬本痹束。
什么是賬本检疫?實(shí)際上就是銀行的這筆交易的流水,在你用銀行卡劃卡支付的過(guò)程中祷嘶,實(shí)際上是顧客和商家都信任銀行屎媳,認(rèn)為銀行記下來(lái)的這個(gè)賬是正確無(wú)誤的,并且銀行也把顧客的錢減少了论巍,把商家的錢增加了烛谊。那么這個(gè)記賬的媒介,該筆賬單嘉汰,可以說(shuō)是賬本的一部分丹禀。
如果你的銀行賬戶消費(fèi)的內(nèi)容足夠多,那么這就是一個(gè)賬本鞋怀,上面記錄著你的所有的交易信息双泪,交易信息和你的賬戶余額的值一一對(duì)應(yīng),在這種情況下密似,你相信銀行焙矛,你相信賬本,銀行作為第三方支付方式残腌,你也就自然就信任了村斟。
可是我為什么要提出賬本的概念呢贫导?
區(qū)塊鏈就是一個(gè)分布式的公共記賬賬本。凡是下載了比特幣(或XX幣蟆盹,我這里用比特幣舉例)的客戶端的人孩灯,都會(huì)自動(dòng)下載這個(gè)賬本,這個(gè)賬本儲(chǔ)存著全球所有人的通過(guò)比特幣交易信息逾滥。這個(gè)信息只能增加钱反,不可以刪除、修改匣距,否則就無(wú)法解決同步的問(wèn)題面哥。
那么我們就可以理解區(qū)塊鏈,就是一個(gè)分布式的不可刪改的數(shù)據(jù)庫(kù)毅待,現(xiàn)在理解了吧尚卫?
回歸正題,為什么要用區(qū)塊鏈尸红,因?yàn)閰^(qū)塊鏈的廣播機(jī)制是通過(guò)比特幣進(jìn)行交易而儲(chǔ)存的吱涉,每個(gè)交易中都會(huì)有一個(gè)東西叫做附言(OP_RETURN),在附言位置可以留自己的轉(zhuǎn)賬信息比如:
哈外里,這筆交易你收好怎爵!是小明轉(zhuǎn)給你的
這個(gè)信息是隨意的,可以寫任何東西盅蝗。
真實(shí)的例子 附言內(nèi)容是 haha
那么聰明的人來(lái)了鳖链,這段信息是不是可以用來(lái)儲(chǔ)存東西,雖然有容量限制墩莫,但是儲(chǔ)存的東西就是永久的不會(huì)被更改的芙委。
不錯(cuò),我創(chuàng)建一個(gè)公共的計(jì)票的比特幣的賬戶狂秦,并且公開(kāi)地址灌侣,每個(gè)投票者對(duì)這個(gè)地址進(jìn)行轉(zhuǎn)賬,并且附上自己的投票信息裂问,比如候選人什么的作為附言侧啼,然后進(jìn)行轉(zhuǎn)賬,內(nèi)容就是相當(dāng)于“發(fā)布到了區(qū)塊鏈”上了堪簿。
區(qū)塊鏈技術(shù)基于去中心化的對(duì)等網(wǎng)絡(luò)痊乾,用開(kāi)源軟件把密碼學(xué)原理、時(shí)序數(shù)據(jù)和共識(shí)機(jī)制相結(jié)合戴甩,來(lái)保障分布式數(shù)據(jù)庫(kù)中各節(jié)點(diǎn)的連貫和持續(xù)符喝,使信息能即時(shí)驗(yàn)證闪彼、可追溯甜孤、但難以篡改和無(wú)法屏蔽协饲,從而創(chuàng)造了一套隱私、高效缴川、安全的共享價(jià)值體系茉稠。
高判立下,這樣每個(gè)投票者的投票信息就是公開(kāi)的可以驗(yàn)證的把夸,但是又由于比特幣地址本身具有匿名性而线,誰(shuí)也不知道發(fā)布投票信息的人是誰(shuí),這又符合了隱私性恋日。
你看膀篮,是不是完美了?
為什么用環(huán)簽名
不是岂膳,并不完美誓竿。
為什么?
那在這種情況下谈截,豈不是任何人都可以投票了筷屡,不經(jīng)過(guò)投票中心認(rèn)證的人,都可以瞎投簸喂,擾亂視聽(tīng)毙死,而且投票者無(wú)法驗(yàn)證整體性。
沒(méi)錯(cuò)喻鳄,這個(gè)時(shí)候偉大的環(huán)簽名來(lái)了扼倘。
在理解環(huán)簽名之前,你需要對(duì)密碼學(xué)的簽名機(jī)制有所了解除呵,如果不了解唉锌,請(qǐng)點(diǎn)擊這里。
環(huán)簽名竿奏,實(shí)際上是一種特殊的群簽名袄简。你不用理解什么是群簽名,只需要聽(tīng)我繼續(xù)往下講什么是環(huán)簽名泛啸。
你看绿语,我附了一個(gè)山東大學(xué)一個(gè)優(yōu)秀的博士論文截圖,是不是瞬間就顯得高大上候址?
其實(shí)也沒(méi)有什么的吕粹。
環(huán)簽名是對(duì)一個(gè)特定的內(nèi)容進(jìn)行簽名。
在簽名之前岗仑,所有人圍城一個(gè)環(huán)匹耕,每個(gè)人生成一個(gè)自己的私鑰Si,并且告訴其他人自己的公鑰(P1,P2,P3...Pn)荠雕。
接下來(lái)就是開(kāi)始簽名稳其,每個(gè)人用自己的私鑰Si和所有人的公鑰(P1,P2,P3...Pn)對(duì)內(nèi)容m進(jìn)行簽名驶赏,可以得到簽名s。
注意:
- 每個(gè)人的得到的簽名都是不一樣的
- 簽名的長(zhǎng)度取決于公鑰的個(gè)數(shù)
這樣既鞠,我們把m替換為我們的投票內(nèi)容煤傍,這樣就可以在組織投票之前,對(duì)能夠投票的人進(jìn)行圈定嘱蛋,只有在這個(gè)圈子里的人才能投票蚯姆。
環(huán)簽名具有天然的可驗(yàn)證性,任何人都可以驗(yàn)證自己洒敏,只需要根據(jù)得到的簽名和所有人的公鑰就可以得出自己是不是真正的投票了龄恋。
如果把簽名信息s也隨著信息m一起廣播到區(qū)塊鏈上,那是不是就能夠保障整體驗(yàn)證性與個(gè)體驗(yàn)證性凶伙?
好了篙挽,我們投票的主要矛盾解決了!現(xiàn)在镊靴,真的解決了铣卡!
你可能一句都沒(méi)看懂我上面在說(shuō)什么,也可能看懂了一點(diǎn)偏竟,沒(méi)事煮落,摸摸頭,是我表達(dá)能力太差了踊谋,其實(shí)都是非常簡(jiǎn)單的東西蝉仇。
具體投票協(xié)議
我不告訴你哈哈哈哈哈哈,會(huì)在九月份公開(kāi)殖蚕。
都是一些數(shù)學(xué)表達(dá)轿衔,發(fā)了也得花大量篇幅去解釋,費(fèi)勁睦疫。
因?yàn)閮?nèi)容可能會(huì)查重害驹,即使是中文版本現(xiàn)在我也不想發(fā)。
技術(shù)棧
后端語(yǔ)言:PHP
后端數(shù)據(jù)庫(kù):MySQL
區(qū)塊鏈:比特幣BTC/比特幣測(cè)試網(wǎng)絡(luò)TESTNET
PHP MVC 框架:Slim
PHP DAO 框架:Illuminate Database
PHP 依賴管理: Composer
PHP 模板引擎:TWIG
前端包管理:NPM
前端CSS預(yù)處理器:Sass
前端代碼打包工具:Gulp
前端預(yù)編譯器:browserify
版本控制:Git
說(shuō)句實(shí)話蛤育,技術(shù)挺復(fù)雜的宛官,用到了很多第三方類庫(kù)、框架瓦糕、工具底洗,感謝很多第三方類庫(kù)的幫助,在我寫代碼的時(shí)候咕娄,也發(fā)現(xiàn)了一個(gè)第三方類庫(kù)的Bug亥揖,并隨手修復(fù)了,也算是對(duì)開(kāi)源社區(qū)的回饋吧圣勒。
關(guān)于開(kāi)源
項(xiàng)目會(huì)開(kāi)源的费变,我知道摧扇,區(qū)塊鏈最近創(chuàng)業(yè)很多,我的這個(gè)項(xiàng)目也可以用來(lái)創(chuàng)業(yè)胡控,但是我根本不在乎這些金錢的東西,我更享受開(kāi)源所帶來(lái)的快感旁趟。
但是如果拿去用來(lái)做商業(yè)用途昼激,我還是很不爽的,所以我的這個(gè)項(xiàng)目禁止用于商業(yè)用途锡搜,但是非營(yíng)利用途都是可以的橙困。
截圖
可能不是最終版,先嘗鮮一下
本文參考文獻(xiàn)
[1] Jonker H, Mauw S, Pang J. Privacy and verifiability in voting systems: Methods, developments and trends[J]. Computer Science Review, 2013, 10:1-30.
[2] 張江霄, 李舟軍, 劉霞,等. 基于群盲簽名的多授權(quán)電子投票系統(tǒng)[J]. 中國(guó)科技論文, 2015(8):980-983.
[3] Mercer R. Privacy on the Blockchain: Unique Ring Signatures[J]. 2016.