国产乱人伦在线播放,99无码精品二区在线视频,最近在线更新8中文字幕免费,精品成人一区二区三区四区

您的位置:首頁 > 區(qū)塊鏈 >

Semaphore是用零知識證明的開源項(xiàng)目 每個(gè)Identity只能發(fā)送一次Signal

2019-11-12 14:16:38 來源: 區(qū)塊網(wǎng)

Semaphore是一個(gè)用零知識證明(zk-SNARK)技術(shù)的開源項(xiàng)目。Semaphore實(shí)現(xiàn)的是基于零知識證明的身份和信號。https: github com barryWhiteHat

Semaphore是一個(gè)用零知識證明(zk-SNARK)技術(shù)的開源項(xiàng)目。Semaphore實(shí)現(xiàn)的是基于零知識證明的身份和信號。

https://github.com/barryWhiteHat/semaphore

1. 整體框架

Semaphore整個(gè)項(xiàng)目,由三部分組成:nodejs模塊(客戶端/服務(wù)器端以及前端頁面),snark模塊(zk-SNARK Groth16電路相關(guān)模塊),以及以太坊上的智能合約。主要邏輯都在semaphorejs目錄中,其源代碼目錄結(jié)構(gòu)如下:

contracts - 智能合約,使用truffle框架部署測試。

snark - snark模塊,使用snarkjs(iden3)開發(fā)zk-SNARK電路。

src - nodejs模塊,實(shí)現(xiàn)前后端。

三部分之間的邏輯關(guān)系如下:

2. Key & Identity

使用Semaphore的每個(gè)賬戶需要創(chuàng)建私鑰和公鑰。每個(gè)賬戶的公鑰和私鑰,以及對應(yīng)的Identity的具體邏輯可以查看semaphorejs/src/client/semaphore.js文件中g(shù)enerate_identity函數(shù):

const private_key = crypto.randomBytes(32).toString('hex');

const prvKey = Buffer.from(private_key, 'hex');

const pubKey = eddsa.prv2pub(prvKey);

const identity_nullifier = '0x' + crypto.randomBytes(31).toString('hex');

const identity_trapdoor = '0x' + crypto.randomBytes(31).toString('hex');

const identity_commitment = pedersenHash([bigInt(circomlib.babyJub.mulPointEscalar(pubKey, 8)[0]), bigInt(identity_nullifier), bigInt(identity_trapdoor)]);

私鑰是256位的隨機(jī)數(shù)。公鑰是私鑰的EdDSA的簽名。Identity主要由兩部分組成:31個(gè)字節(jié)的nullifier和31個(gè)字節(jié)的trapdoor。這兩部分都是隨機(jī)生成。這里的nullfier,不要和ZCash中的Nullifier混淆。這里的nullfier就是隨機(jī)數(shù)。每個(gè)Identity會對應(yīng)兩個(gè)對應(yīng)的信息:一個(gè)是commitment,一個(gè)是nullifier_hash。Commitment的計(jì)算方式如下圖:

Identity中的nullifier以及trapdoor并不記錄在以太坊的智能合約中,對應(yīng)的commitment會記錄在合約中。

3. Semaphore.sol

semaphorejs/contracts/Semaphore.sol是智能合約部分的邏輯實(shí)現(xiàn)。insertIdentity函數(shù)實(shí)現(xiàn)一個(gè)賬戶Identity的“注冊”。

function insertIdentity(uint256 identity_commitment) public style="box-sizing: border-box; padding-right: 0.1px;"> insert(id_tree_index, identity_commitment);

uint256 root = tree_roots[id_tree_index];

root_history[root] = true;

}

Identity對應(yīng)的commitment會添加到一個(gè)merkle樹上,同時(shí)新的merkle樹根會記錄在root_history的mapping中。

4. Nullifier Hash

Nullifier Hash是用來證明某個(gè)Identity對應(yīng)commitment存在一個(gè)merkle樹上,并生成的標(biāo)示。Nullfier Hash的計(jì)算過程可以查看電路的邏輯(semaphorejs/snark/semaphore-base.circom)。

template Semaphore(jubjub_field_size, n_levels, n_rounds) {

...

component external_nullifier_bits = Num2Bits(232);

external_nullifier_bits.in <== external_nullifier;

component nullifiers_hasher = Blake2s(512, 0);

for (var i = 0; i < 248; i++) {

nullifiers_hasher.in_bits[i] <== identity_nullifier_bits.out[i];

}

for (var i = 0; i < 232; i++) {

nullifiers_hasher.in_bits[248 + i] <== external_nullifier_bits.out[i];

}

for (var i = 0; i < n_levels; i++) {

nullifiers_hasher.in_bits[248 + 232 + i] <== identity_path_index[i];

}

for (var i = (248 + 232 + n_levels); i < 512; i++) {

nullifiers_hasher.in_bits[i] <== 0;

}

component nullifiers_hash_num = Bits2Num(253);

for (var i = 0; i < 253; i++) {

nullifiers_hash_num.in[i] <== nullifiers_hasher.out[i];

}

nullifiers_hash <== nullifiers_hash_num.out;

...

}

Nullifier Hash的計(jì)算邏輯如下圖:

其實(shí)nullfier和path index已經(jīng)足夠表示。額外加入了external nullfier的原因是,同一個(gè)Identity,在external nullifier不同的情況下,生成不同的nullifier hash。也就是說,一個(gè)賬戶可以多次“消費(fèi)”。這樣設(shè)計(jì)的原因是為了Signal的業(yè)務(wù)需求。

5. Signal

通過智能合約創(chuàng)建了Identity,就可以發(fā)信號(Signal)了。一個(gè)賬戶發(fā)送信號,必須首先提供Identity在merkle樹上的證明(能計(jì)算出commitment)。智能合約中的broadcastSignal是發(fā)送信號的接口:

function broadcastSignal(

bytes memory signal,

uint[2] memory a,

uint[2][2] memory b,

uint[2] memory c,

uint[4] memory input // (root, nullifiers_hash, signal_hash, external_nullifier)

) public

style="box-sizing: border-box; padding-right: 0.1px;"> isValidSignalAndProof(signal, a, b, c, input)

{

uint nullifiers_hash = input[1];

signals[current_signal_index++] = signal;

nullifier_hash_history[nullifiers_hash] = true;

emit SignalBroadcast(signal, nullifiers_hash, input[3]);

}

signal就是需要發(fā)送的信號,a/b/c是零知識證明的proof信息,input是零知識證明對應(yīng)電路的輸入,包括merkle樹根,nullifier hash,signal hash以及external nullifier。

只有在proof信息驗(yàn)證過后,對應(yīng)signal才會記錄。每次發(fā)送signal時(shí)對應(yīng)的nullifier hash會被記錄下來。也就是說,在external nullifier不變的情況下,所有Identity只能發(fā)送一次Signal。

總結(jié):

Semaphore項(xiàng)目由js開發(fā),結(jié)合零知識證明(zk-SNARK),在以太坊的智能合約的基礎(chǔ)上實(shí)現(xiàn)Identity。每個(gè)Identity可以發(fā)送信號。在external nullifier不變的情況下,每個(gè)Identity只能發(fā)送一次Signal。(Star Li)

關(guān)鍵詞: Semaphore 零知識證明 Identity

精選 導(dǎo)讀

募資55億港元萬物云啟動招股 預(yù)計(jì)9月29日登陸港交所主板

萬科9月19日早間公告,萬物云當(dāng)日啟動招股,預(yù)計(jì)發(fā)行價(jià)介乎每股47 1港元至52 7港元,預(yù)計(jì)9月29日登陸港交所主板。按發(fā)行1 167億股計(jì)算,萬

發(fā)布時(shí)間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉股多為高端制造業(yè)

隨著半年報(bào)披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場基金總數(shù)為9794只,資產(chǎn)凈值為269454 75億元,同比上

發(fā)布時(shí)間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產(chǎn) 上市公司粉飾財(cái)報(bào)動作不斷

再有上市公司宣布變賣房產(chǎn)。四川長虹25日稱,擬以1 66億元的轉(zhuǎn)讓底價(jià)掛牌出售31套房產(chǎn)。今年以來,A股公司出售房產(chǎn)不斷。根據(jù)記者不完全統(tǒng)

發(fā)布時(shí)間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復(fù)深交所關(guān)注函 股份繼續(xù)沖高

回復(fù)交易所關(guān)注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時(shí)觸及漲停,報(bào)20 2元 股。值得一提的是,在7月21日

發(fā)布時(shí)間: 2022-08-12 09:56
資訊   2022-08-12

萬家基金再添第二大股東 中泰證券擬受讓11%基金股權(quán)

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡稱齊河眾鑫)所持有的萬家基金11%的股權(quán),交易雙方共同確定本次交易的標(biāo)的資

發(fā)布時(shí)間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購 對債市影響如何?

央行12日再次開展了30億元逆回購操作,中標(biāo)利率2 10%。這已是央行連續(xù)7日每天僅進(jìn)行30億元的逆回購縮量投放,創(chuàng)下去年1月以來的最低操作規(guī)

發(fā)布時(shí)間: 2022-07-13 09:38
資訊   2022-07-13

美元指數(shù)創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個(gè)月新低

由于對美聯(lián)儲激進(jìn)加息的擔(dān)憂,美元指數(shù)11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個(gè)月新低。美

發(fā)布時(shí)間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達(dá)克跌幅創(chuàng)下記錄以來最大跌幅

今年上半年,美股持續(xù)回落。數(shù)據(jù)顯示,道瓊斯指數(shù)上半年下跌15 3%,納斯達(dá)克綜合指數(shù)下跌29 5%,標(biāo)普500指數(shù)下跌20 6%。其中,納斯達(dá)克連續(xù)

發(fā)布時(shí)間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內(nèi)增加超344億元

近期A股走強(qiáng),滬指6月以來上漲4%,融資客熱情明顯回升。數(shù)據(jù)顯示,截至6月16日,兩市融資余額1 479萬億元,月內(nèi)增加344 67億元,最近一個(gè)半

發(fā)布時(shí)間: 2022-06-20 09:41
資訊   2022-06-20

4個(gè)交易日凈買入超百億元 北向資金持續(xù)流入A股市場

北向資金凈流入態(tài)勢延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計(jì)凈

發(fā)布時(shí)間: 2022-06-17 09:37
推薦   2022-06-17

熱門TAG

more
美聯(lián)儲今年已將基準(zhǔn)利率從接近零大幅上調(diào)至略高于3% EIA報(bào)告:美國原油庫存及戰(zhàn)略儲備減少,汽油及精煉油庫存輕微波動 美國政府更廣泛推動從汽油動力汽車轉(zhuǎn)向電動汽車的一部分 數(shù)據(jù)顯示:今年9月日本船企接單量延續(xù)8月下跌下跌趨勢 公告顯示:2022年前三季度TCL中環(huán)研發(fā)投入為27億元 占比營業(yè)收入5.42% 新的111.75億英鎊注資列在“對金融機(jī)構(gòu)的援助—支付給英格蘭銀行”標(biāo)題下 本次政府儲備肉投放面向北京18家主要連鎖超市門店及相關(guān)零售終端投放 有交易員預(yù)計(jì):如果LME不采取措施 接下來可能將有數(shù)十萬噸鋁流入LME 據(jù)報(bào)道:繼德國最大釀酒商拉德貝格啤酒公司9月宣布漲價(jià) 據(jù)報(bào)道:澳大利亞礦商Pilbara的鋰礦拍賣價(jià)再創(chuàng)新高 折算后的碳酸鋰成本 中集天達(dá)首次公開發(fā)行A股股票 招股書顯示此次擬公開發(fā)行股數(shù)不超過103, 多家銀行加強(qiáng)綠色金融頂層設(shè)計(jì) 致力于為經(jīng)濟(jì)社會綠色低碳轉(zhuǎn)型貢獻(xiàn)力量 萊特幣 比特幣 數(shù)字資產(chǎn) 火幣 以太經(jīng)典 比特股 EOS 比特幣現(xiàn)金 量子鏈 Hcash 泰達(dá)幣 瑞波幣 Qcash 比特幣鉆石 超級比特幣 優(yōu)幣 硬分叉 加密貨幣