📜 [專欄新文章] [ZKP 讀書會] Zkopru
✍️ NIC Lin
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Photo by Barth Bailey on Unsplash
Zkopru
Zkopru 這個名稱是由 zk-transaction + Optimistic Roll-Up 的字首組成,這個layer 2 的協議包含了使用零知識證明來保護交易的隱私( zk-transaction)、再搭配 Optimistic Rollup 來管理 layer 2 。
接下來會講到 Zk Rollup 和 Optimistic Rollup,如果讀者還不熟悉,可以先閱讀這篇ˊ指介紹。
它和 Zk Rollup 有什麼不同?
Zk Rollup 連同 layer 2 的鏈的 state transition 都是由零知識證明來處理,但缺點是目前零知識證明技術的成本較高,包含在鏈下產生證明和在鏈上驗證證明(鏈下產生證明耗費時間,鏈上驗證證明則耗費 gas)。
註:接下來提到的(零知識證明、circuit)的鏈下成本都是指時間多寡,而鏈上成本則都是指 gas 多寡)
另外目前的 Rollup 協議都是使用 merkle tree 來儲存當前的鏈的狀態(例如使用者的餘額、nonce 或是 UTXO) — 如果使用者要證明他有 $20,則他必須要提供 merkle proof ,而這個 merkle proof 的大小及 hash 次數也會因為選擇的 merkle tree 的高度而有不同。
而這個因素再搭配上 hash 的成本在 EVM 和 circuit 會有不同,導致協議如果使用在 EVM 成本較便宜的 hash function,則 circuit 的 hash 成本會較高;反之亦然。
目前還沒有安全的 hash function 是在 EVM 或 circuit 裡都是便宜的,所以協議設計者必須做出妥協。可想而知,Zk Rollup 便是使用在 circuit 便宜但是在 EVM 貴的 hash function,這導致當使用者要離開 layer 2 回到 layer 1 時(這個步驟在這裡稱作 withdraw),他成本會很高(因為要在 EVM 裡驗證他持有資產的擁有權,這可以是一個 merkle proof 或 zk proof)。
和 Optimistic Rollup 有什麼不同?
而這個成本相對的也反映了採用 Optimistic Rollup 的好處 — 只有在特殊情況下(例如協議裡的 Operator 作惡)才需要付出較高的成本,其他時間大家則享受極低成本的使用費。
但使用 Optimistic 的方式也有附帶的缺點: challenge period 。輕節點使用者需要等待 challenge period 來確保交易不會被推翻、withdraw 過程需要等待 challenge period(以下稱 withdraw period) 過了才能將錢提回到 layer 1。
所以使用哪種 Rollup 就要看協議設計者如何依照他們的使用需求去權衡。
那為什麼不使用 Optimistic Rollup 就好?
因為需要零知識證明來保護交易隱私!
前提
zkopru 使用和 Bitcoin 相同的 UTXO model
transfer 的付款方、收款方和金額都是被保護住、看不到的,但 zkopru 和其他隱私幣一樣,不需要付款方和收款方合作即可由付款方單獨完成 transfer。
但也和隱私幣一樣,收款方必須去監看鏈上每一筆交易並嘗試解密來得知是否有人 transfer 給自己
基本使用流程
Deposit
使用者將 ether 、ERC20 或 ERC721 代幣轉入 zkopru 位於 layer 1 的合約,觸發 event。協議的 Operator 會監看合約並搜集 deposit event,然後將這些 deposit 一起放入下一個(zkopru 的)區塊裡。
Transfer
如同 Bitcoin 的 UTXO,zkopru 裡使用者必須要證明其對某 UTXO 有擁有權才能花費該 UTXO。要被花費的 UTXO 會被放到 transaction 格式裡的 inputs 欄位, outputs 欄位的 UTXO 則是填入收款方的公鑰和收款金額(outputs 的 UTXO 就會是新產生的 UTXO)。
因為要保護交易的隱私,新的 UTXO 的資訊是不會洩露出去的,第三方只會看到該 UTXO 的 hash 值。那收款方要怎麼知道一個 UTXO 是不是他的呢?
sender 會利用自己的私鑰、收款方的公鑰及一個隨機值,透過密鑰交換協議來產生一個臨時的共享密鑰。 付款方用此共享密鑰加密收款方所需的資訊(包含 transfer 的代幣種類和金額),而收款方會監看每一筆交易並試著用自己的私鑰組出一個共享密鑰然後去解密,如果解密完的資料不是亂碼而是合理的,則可確認收到錢。
Withdraw使用者產生 withdraw 類別的交易,等待協議 Operator 收進區塊裡,然後再等待 withdraw period 過去,即可送出 merkle proof 來將錢提領回 layer 1。
註:提領回 layer 1 之後的收款方和金額都是公開透明的,隱私不再受保護。
零知識證明
zkopru 裡一共有三種類型的 merkle tree 來儲存所需的狀態,分別是 UTXO tree、Nullifier tree 以及 Withdrawal tree。
UTXO tree 紀錄所有產生過的 UTXO,包含新的和已經花掉的。
Nullifier tree 紀錄被花掉的 UTXO 的 nullifier 值。一個 UTXO 的 nullifer 由該 UTXO 的相關資訊算出,而且只能得出唯一一個 nullifier。這個 nullifier 能夠證明該 UTXO 已被花掉,但同時又不會洩露是哪個 UTXO 被花掉。聽起來很饒口,但這就是零知識證明的能力。
Withdrawal tree 紀錄 withdraw 類別的交易的資訊,使用者要提領回 layer 1 就需要這棵 merkle tree 的 merkle proof。也是就說,前面說的 Operator 會把 withdraw 交易放到這棵 merkle tree 裡,然後等待 withdrawal period 過後,再由使用者提供 merkle proof 來領走。
這裏以 transfer 為例來說明其中一部分的 circuit 在做什麼事
當使用者要產生一筆 transfer,他首先要證明 inputs 裡的 UTXO 都是合法的,這包含了證明:
他擁有這個 UTXO — 藉由提供簽章來證明
這個 UTXO 是真的存在的 — 藉由證明該 UTXO 的 hash 值存在 UTXO tree 裡
這個 UTXO 沒有被花過 — 藉由證明該 UTXO 的 nullifier 值不存在 Nullifier tree 裡
接者是 outputs,新產生的 UTXO 的 hash 值會被放進 UTXO tree 裡。
最後是比對 inputs 金額加總等於 outputs 金額加總再加上交易手續費。
而這些都在 circuit 裡完成,第三方沒辦法得知實際的 inputs、outputs 或 nullifiers 等等,第三方只能知道新的 UTXO 的 hash 值以及運算過程是正確的 — 也就是這些 tree 都被正確的更新了。
其他特色
Mass migration
原本每個使用者要把資產換到另外一個 layer 2 協議,他必須申請 withdraw 、等待 withdraw period ,然後把資產 deposit 到另外一個 layer 2 協議。
zkopru 支援使用者成批的搬移資產到另外一個 layer 2 協議 — 共享經濟。
Instant withdrawal
如果其他需要等待 withdraw period 的應用來說,withdraw period 是一個 UX 痛點。zkopru 的 instant withdrawal 提供急著 withdraw 的一方和不急著 withdraw 的一方一個管道能互惠。
急的一方提供一點手續費,對自己的 withdraw 交易做簽名並廣播出去。不急的一方在聽到這個簽名後,可以將這個簽名送到 zkopru 合約並附上 withdraw 金額(扣掉自己該收的手續費)。
這筆錢會直接轉給急的一方,然後急的一方的 withdraw 擁有權便會轉移到不急的一方手上,不急的一方再慢慢等到 withdraw period 過了再提領。
估計效能
目前在初版的效能估計中,一筆 transfer 平均耗費 8800 gas;而 TPS 則是 105。zkopru 還在積極更新迭代中,所以這個效能會在提升。
Reference:
https://ethresear.ch/t/zkopru-zk-optimistic-rollup-for-private-transactions/7717
https://docs.zkopru.network
https://www.chainnews.com/zh-hant/articles/443085023250.htm
[ZKP 讀書會] Zkopru was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
hash解密 在 Pazu 薯伯伯 Facebook 的精選貼文
零基資安訓練營(十):簡易製作加密虛擬碟中碟
文:薯伯伯
電腦加密有不同的層次,其中一種必須做,是要把整個硬盤也加密,方法很容易,Mac 用戶只需要打開系統的 FileVault 便可,Windows 的用戶則只需打開 BitLocker,就能把整個裝置加密。把系統加密之後,如果沒有開機的密碼,理論上別人即使把硬碟取出來,也難把檔案抽出。當然不是所有人也擔心自己的電腦會被強行拆開並抽出硬碟,但還有其他情況,例如將來變賣電腦,又或是電腦被狗咬,系統加了密,感覺就安心一些。
具體的操作方法很簡單,問問 Google 就可以,這裡就不多說。
👉 搜尋:Mac FileVault 2 啟動磁碟加密
👉 搜尋:Windows BitLocker 開啟裝置加密
這篇文章主要想普及的一種資安保障,是在電腦中製作另一些「虛擬加密磁碟檔案」(virtual encrypted disk)。簡單來說,就是電腦上生成一個檔案,載入並輸入密碼之後,就會成為一個新的磁盤,像個「碟中碟」。
先說為甚麼電腦本身已經用 FileVault 或 BitLocker 加密了,何以仍然要再在裡面設置一個「虛擬加密磁碟檔案」,因為當你開機輸入密碼之後,電腦中的檔案便會即時解密,若然在操作過程中電腦受到攻擊,就會有很大風險。
另一個要考慮的情況,是現在有不少人把原生的檔案同步至 Google Drive 或 口程 Dropbox 作備份,用起來雖然方便,但這些服務便能讀取你的檔案內容。而如果你的 Google Drive 是由院校或公司提供(即 Google for Education 或 Google Enterprise),管理員雖然看不到檔案內容,但卻可以看到檔案名字,這是另一層的隱患。所以,除了裝置要加密,還需要加裝一個碟中碟,方為上策。
虛擬碟中碟,我推介用 VeraCrypt。
官方地址:https://www.veracrypt.fr/en/Downloads.html
免費,開源,跨三大電腦平台,在資安界裡評價一直很好
留意:一定要從官方網站下載,不要從第三方網站下載
這裡示範如何做一個 10GB 大小的虛擬加密碟中碟。
安裝 Veracrypt 後,在主畫面點擊 Create Volume,出現 Creation Wizard,跟著一步一步去做。
選擇 Create an encrypted file container,按 Next。
選擇 Standard VeraCrypt volume,按 Next。
選擇 Volume Location,點擊 Select File,點擊桌面位置,在 Save As 一欄輸入名字,這裡舉例叫做 10gb。之後選擇 Never save history,按 Next。
在 Encryption Algorithm 選擇 AES,下方的 Hash Algorithm 選 SHA-512,按 Next。
Volume Size 選擇 10 GB,按 Next。(小一點也可以,看自己需要。)
Volume Password,輸入密碼。下方的設定,全都不選,按 Next。
之後如果顯示 Large Files 一欄,選擇「I will store files larger than 4GB on the volume」,按 Next。
Format Options 選擇 Filesystem type: MacOS Extended 或 NTFS,按 Next。
Cross-Platform Support 選擇 I will mount the volume only on Mac OS X,按 Next。
之後在 Volume Format,不停無意地移動鼠標,軟件會蒐集隨機的訊息。建議不要只管打圈,也可以用鼠標寫寫詩,蒐集到的隨機數據越多越好。
之後按 FORMAT,等一會,檔案就會生成,按 Exit 就可以。
這時在桌面就會看到一個 10gb 的檔案,把檔案拖至 VeraCrypt 的主畫面,按 Mount,輸入密碼,這時就會在 Finder 或檔案總管,就會看到好像插入了一個 USB 手指一樣。把需要加密的檔案放進這個加密虛擬碟中碟。用完之後,在 VeraCrypt 上按 Dismount All 便會自動退出。
VeraCrypt 還有很多有趣的功能,例如有個 Hidden VeraCrypt volume,可以製作同一個檔案,但輸入不同密碼,卻會看到不同檔案。例如有人節磨你,要求你打開檔案,你不情不願,輸入密碼後,裡面只有愛情動作片。但實際上當你輸入另一組密碼時,卻會有個驚世大陰謀!是不是有點電影橋段的感覺了?
把電腦檔案加密存儲,可以有千百萬個不同的原因及動機,但要記住,做事光明磊落的人,做實事的人,是更應保護好檔案免受侵擾。檔案加把檔,是保障資訊安全的重要的一步,必須學習。
照片:Markus Winkler via Unsplash
▶️ Patreon: www.patreon.com/pazu
hash解密 在 OSSLab Geek Lab Facebook 的精選貼文
新聞 http://0rz.tw/htH7U
"兩家美國資安公司號稱有「特殊技術」幫企業解決勒索軟體問題,被揭露其實是瞞著客戶代繳贖金"
OSSLab Geek Lab曾經寫過案例說明:
http://0rz.tw/GeEpo
有些勒索病毒的 encrypt 算法為了求效率
對於大型檔案 像SQL 的mdf 他是對mdf page結構 header 加密 ,沒對數據沒加密 .所以說有機會沒有動到Schema跟Data.這樣是有機會可以恢復資料庫的.
曾有媒體問過我們,為何不用"解密"這個說詞?
技術長接觸密碼學也有30年了,也做過script kid😅爆破 碰撞各種hash(WEP,EFS,DES,COMP128等....)
資料救援跟資安攻擊都是帶有一定限定條件逆向硬幹的技術,有憑有據而不是說啥獨家"我最強最猛" ,最後卻說不出自己的思路...
現在勒索病毒非常防範DRAM鏡像,因此最高成功成功方式必須要用Cold boot或DMA攻擊物理記憶體鑑識技術.才會有高的成功機會.這方面台灣能做到的人個位數.
https://www.osslab.com.tw/introducing-pcileech/
闡明技術思路,以最強技術與服務來解決客戶問題
這才是我們的風格
文章最後連結 2019 最新更新 免費勒索病毒解密軟體
https://www.osslab.com.tw/nomoreransom/
#OSSLab #資料救援 #資料常備份 #才可遠離OSSLab
#要倒了
hash解密 在 共通性AES256解密工具使用教學 的必吃
共通性AES256解密工具使用教學 ... 其中,"CheckInfo"為加密資料,請您將“8b508e.....fef183"的解密前資料,放置下方加密資料欄位,並輸入正確的”Hash Key“和”Hash IV“後,點 ... ... <看更多>