Bitcoin 涉及到的資料結構和演算法分析

2022-07-08 09:54:10 字數 1690 閱讀 2576

2008 年中本聰提出 bitcoin 的概念。

2009 年專案上線。

所有 coin 由 mining 產生,一共 2100 萬枚。通過調整 difficulty, 確保每隔10min 產生新的 block。

pow + chaining,使得修改交易記錄基本不可能。

bitcoin 由四部分組成:

leaf node: hash(data block)

non-leaf node: hash(children nodes)

hash tree 的優點:高效、安全地驗證資料內容。

確定乙個葉子節點是否屬於一棵二叉樹:o(log(# leaf nodes))。

hash list: o(# leaf nodes)。

uses:確定資料 undamaged,unaltered,not fake。git/mercurial 使用了 merkle tree。

mathematical algorithm: 將任意長度的資料轉換為固定長度的位元字串。

one-way function: message->hash 很容易, 但 hash->message 很難,幾乎不可能。

輸入資料:message。

輸出資料:hash value (hash,message digest,digest)

理想的 cryptographic hash function 具有 5 個性質:

1. deterministic,確定性/唯一性。相同的輸入總會得到相同的 hash。

2. 可以很快計算出任一給定 message 的 hash value。

3. 從 hash value 反推出 message 是不可行的。除了嘗試所有可能的 message(暴力破解)。

4. 如果 message 有了很小的變化,那麼 hash value 會有很大的變化(雪崩效應,這一點與 simhash 相反)。

5. 找到具有相同的 hash value 的 兩個不同的 message 是不可行的。

cryptographic hash function 也可用於快速查詢,不過成本比較高。

cryptographic hash function 的安全級別有以下幾個性質:

1. pre-image resistence

從 hash value 找出 message 很難。

2. second pre-image resistence

給定 m1,很難找到乙個不同的 m2,滿足 hash(m1) = hash(m2)。

3. collision resistence

很難找到兩個不同的 m1、m2,滿足 hash(m1) = hash(m2)。

要求 hash value 的長度是 pre-image resistence 需要的兩倍。不然會在 birthday attack 中發生碰撞。

public key cryptography

在 public channel 上安全地交換 cryptographic key。

和 rsa 一樣,是一種 public key encryption algo。

public key -> sha256 -> ripemd160 -> public key hash -> base58check encode

Actvity啟動過程涉及到的資料結構

taskrecord 記錄activiyt棧的資訊,持有乙個arraylist和activitytask activityrecord 記錄activiyt的資訊,持有乙個activityinfo activitystack 持有乙個taskrecord的list arraylistmtaskhis...

discuz涉及到的問題

其中 設定創始人 config global.php 修改 config admincp founder 1,511314 其中門戶管理中同步登陸 在discuz panel修改 construct將tbl common admincp session表中的 errorcount置為 1 panel...

專案管理涉及到的文件

業務聯絡函 業務需求說明書 立項報告 立項評審報告 專案實施方案 專案組通訊錄 專案計畫與執 況跟蹤 需求規格說明書 系統介面規格說明書 總體設計 系統建設整體解決方案 軟體配置管理計畫 軟體質量保證計畫 編碼規範 源 sit測試報告和測試用例 uat測試報告和測試用例 效能測試方案與報告 上線實施...