機密付款概要

Oracle Blockchain Platform Digital Assets Edition 使用 Pedersen 的承諾來確保資料的安全。

零知識證明

零知識驗證 (ZKP) 是加密通訊協定,可讓誠實的驗證者向驗證者展示陳述式的真相,而不透露任何其他資訊。不誠實的驗證程式無法說服假陳述式為真的驗證程式。ZKP 可確保不會顯示超過宣告有效性的機密資料。ZKP 讓您可以證明加密密碼值的特定特性,例如確認它落在某個範圍之內或為特定運算的結果,而不顯示值本身。

佩德森承諾

零知識證明取決於承諾方案,有人可以在其中承諾特定值,同時保持隱藏狀態。Oracle Blockchain Platform Digital Assets Edition 使用 Pedersen 的承諾。Pedersen 承諾使用隨機值 (稱為阻礙因子 ) 以及橢圓曲線加密 (elliptic-curve cryptography),確保機密和不可變。踏板履約承諾為同型態;換句話說,它們支援執行數學運算,例如加減履約承諾,同時保留基本值之間的關係。踏板承諾用於私有交易協定、安全多方運算和匿名認證系統。

使用機密付款

您可以在交易要求中使用 Confidential-Transaction 標頭來啟用機密付款功能。

當您在要求中傳送設為 trueConfidential-Transaction 標頭時,Oracle Blockchain Platform 中的 REST 代理主機會產生唯一的隨機數字 (Pedersen 承諾所需的閃爍係數),並將它傳送到暫時對應中。鏈碼會使用此功能來處理輸入,並將機密資訊儲存在專用資料收集中,而非狀態資料庫中。

交易資訊

所有權杖作業 (帳戶建立、探勘、傳輸、燒錄等) 都會產生交易記錄,以便追蹤交易歷史記錄。交易資料儲存在兩個地方:公用分類帳 (狀態資料庫) 和專用資料收集。透過機密付款,機密資料只會儲存在涉及交易之組織的專用資料集合中,以純文字儲存。下表顯示任何給定異動 ID 的異動值儲存位置。

公用分類帳 (狀態資料庫) 私人資料收集
  • assetType
  • transaction_id
  • token_id
  • from_account_id
  • from_account_balance (encrypted)
  • from_account_onhold_balance (encrypted)
  • from_account_onhold_burn_balance (encrypted)
  • to_account_id
  • to_account_balance (encrypted)
  • to_account_onhold_balance: (encrypted)
  • to_account_onhold_burn_balance (encrypted)
  • transaction_type
  • amount (已加密)
  • timestamp
  • number_of_sub_transactions
  • holding_id
  • sub_transaction
  • sub_transaction_type
  • category
  • description
  • global_transaction_id
  • assetType
  • transaction_id
  • from_account_balance
  • from_account_onhold_balance
  • from_account_onhold_burn_balance
  • to_account_balance
  • to_account_onhold_balance
  • to_account_onhold_burn_balance
  • amount
  • blindingFactor
  • version

權杖帳戶資訊

同樣地,記號帳戶的相關資訊會儲存在公用分類帳和專用資料收集中。下表顯示任何指定變數替代字帳戶 ID 的交易值儲存位置。

公用分類帳 (狀態資料庫) 私人資料收集
  • assetType
  • account_id
  • org_id
  • token_type
  • token_id
  • token_name
  • balance (已加密)
  • onhold_balance (已加密)
  • onhold_burn_balance (已加密)
  • application_groups
  • bapAccountVersion
  • assetType
  • account_id
  • user_id
  • balance
  • onhold_balance
  • onhold_burn_balance
  • balanceBlindingFactor
  • onHoldBalanceBlindingFactor
  • onHoldBurnBalanceBlindingFactor
  • max_daily_amount
  • daily_amount
  • max_daily_transactions
  • daily_transactions
  • current_date
下列資料儲存在公用分類帳中:
  • account_id 金鑰,對系統中的每位使用者而言都是唯一的。一般而言,它是 orgId (MSP ID) 和 userId (使用者名稱或電子郵件) 的 SHA-256 雜湊,以及其他字首或字尾。
  • 公開分類帳會儲存任何使用者的所有帳戶關鍵碼。使用者可以有多個有趣的記號帳戶,每個記號各有一個。
  • 記號詳細資訊儲存在 token_typetoken_idtoken_name 欄位中。
  • balanceonhold_balance 欄位包含 Pedersen 承諾雜湊,代表儲存在私人資料收集中的餘額實際文字值。
下列資料儲存在專用資料集合中:
  • account_id 金鑰,如前所述。
  • balanceonhold_balance 欄位會保留這些餘額的實際文字值。
  • balance_blinding_factoron_hold_balance_blinding_factor 欄位儲存隨機索引鍵,用於建立儲存在公用分類帳中的 balanceonhold_balance 承諾。
  • 每日交易詳細資訊儲存在 max_daily_amountdaily_amountmax_daily_transactionsdaily_transactionscurrent_date 欄位中。

含機密付款的一般作業

在使用機密付款時提示、轉移、保留或燒錄權杖的工作流程包括額外的步驟,以確保資料完整性。

Minting 權杖

若要提示記號,具有較小角色的使用者會呼叫 issueTokens API。
  1. 在機密付款案例中,issueTokens 方法採用 token_id 值作為輸入,也需要連結因子 (從 REST 代理主機傳送) 以及暫時對應中傳遞的記號數量。
  2. 驗證之後,Pedersen 承諾會從盲點係數和要提示的記號數量產生。
  3. 然後在公用分類帳與私人資料收集中更新整體數量。在公用分類帳中,代表現有餘額的 Pedersen 承諾會隨著 Pederson 承諾增加,這代表著提示 (已核發) 的數量。儲存在私人資料收集中的餘額實際值會隨之增加。
  4. 閃爍因子也會更新,因此無論何時,私人資料收集中的餘額與閃爍因子都可用來驗證儲存在公用分類帳中的對應履約承諾。

在組織內移轉權杖

若要在組織內傳輸記號,寄件者會呼叫 transferTokens API。
  1. 在機密付款案例中,transferTokens 方法會採用 token_id 和選擇性參數作為輸入,同時需要連結因子 (從 REST 代理主機傳送) 以及接收者的 userIdorgId 值,以及暫時對應中傳遞的記號數量。
  2. 驗證之後,Pedersen 承諾會從盲目因子和要移轉的權杖數量產生。
  3. 寄件者帳戶中的權杖數量會減少,且接收者帳戶中的數量會增加 (在公開分類帳和私人資料收集中)。在公用分類帳中,代表寄件者現有餘額的 Pedersen 承諾會減去 Pedersen 承諾,該承諾代表轉讓者的權杖數量。對接收者而言,餘額會以相同方式增加。寄送方餘額與接收方餘額的實際值會在私人資料收集中更新。
  4. 閃爍因子也會更新,因此無論何時,私人資料收集中的餘額與閃爍因子都可用來驗證儲存在公用分類帳中的對應履約承諾。

在組織之間轉移權杖

若要在組織之間轉移記號,寄件者會呼叫 holdTokens API 來擷取轉移金額並保留。
  1. 在機密付款案例中,holdTokens 方法會採用 token_idoperation_idexpiration_time 值作為輸入,同時需要連結因子 (從 REST 代理主機傳送) 以及 notary_user_idnotary_org_idto_user_idto_org_id 值,以及暫時對應中傳遞的記號數量。
  2. 驗證之後,Pedersen 承諾會從盲點係數和要保留的記號數量產生。
  3. 會建立保留物件與寄件人物件。
  4. 餘額履約承諾、實際餘額及交易物件會儲存至公用分類帳,並儲存至兩個組織的私人資料收集,以相應地更新所有餘額。

保留權杖

如前所述,保留作業用於在組織之間轉移權杖。保留作業會使用保留、傳送者及接收者物件,類似於將資料儲存在公用分類帳與私人資料收集中的交易與變數替代字科目物件。保留作業也可用於相同組織中的移轉,在此情況下,不會建立寄送方與接收方物件,且會使用「踏板」履約承諾作為一般「權杖分類架構」作業進行移轉。下表顯示任何指定保留異動 ID 的異動值儲存位置。

在機密模式中,組織之間的傳輸涉及兩個專用資料收集。針對借項,傳送者物件是在保留作業期間建立,而針對貸項建立接收者物件 (當 executeHoldReceiver API 執行時),而不是修改帳戶索引鍵 / 值組。餘額會置於寄件人物件中。銷退折讓金額會放置在指定給收件者的接收者物件中。借方作業完成時,寄件者物件已不再使用且可刪除。同樣地,餘額從接收者物件移至接收者的帳戶後,可以刪除接收者物件。

公用分類帳 (狀態資料庫) 私人資料收集
  • operation_id
  • token_name
  • operation_type
  • status
  • assetType
  • holding_id
  • from_account_id
  • from_org_id
  • to_account_id
  • notary_account_id
  • token_id
  • quantity (已加密)
  • time_to_expiration
  • sender_id
  • category
  • description
  • quantity
  • blinding_factor
  • assetType
  • holding_id

下表顯示為組織間移轉與保留所建立的寄件人物件資訊。

公用分類帳 (狀態資料庫) 私人資料收集
  • assetType
  • sender_id
  • operation_id
  • account_id
  • transaction_id
  • quantity (已加密)
  • version
  • assetType
  • sender_id
  • blindingFactor

下表顯示針對組織間移轉與保留所建立的接收者物件資訊。

公用分類帳 (狀態資料庫) 私人資料收集
  • assetType
  • receiver_id
  • operation_id
  • account_id
  • transaction_id
  • quantity (已加密)
  • version
  • assetType
  • receiver_id
  • blindingFactor
  1. 在機密付款案例中,holdTokens 方法會採用 token_id 和選擇性參數作為輸入,同時需要連結因子 (從 REST 代理主機傳送) 以及接收者的 userIdorgId 值,以及暫時對應中傳遞的記號數量。
  2. 保留作業必須由主要使用者核准或拒絕。
    • 如果公證人使用者核准保留作業,則會從寄送方與保留物件借記數量,並建立異動物件。也會建立接收者物件,並將數量記入接收者物件。
    • 如果公證人使用者拒絕保留,則保留數量會記入寄件人的帳戶,並建立交易物件。
  3. 餘額履約承諾、實際餘額及交易物件會儲存至公用分類帳與私人資料收集,以相應地更新所有餘額。

燒錄權杖

若要燒錄記號,具有燒錄機角色的使用者會呼叫 burnTokens API。
  1. 在機密付款案例中,burnTokens 方法採用 token_id 值作為輸入,也需要連結因子 (從 REST 代理主機傳送) 以及暫時對應中傳遞的記號數量。
  2. 驗證之後,Pedersen 承諾會從盲點係數和要燒錄的記號數量產生。
  3. 然後在公用分類帳與私人資料收集中更新整體數量。在公用分類帳中,代表現有餘額的 Pedersen 承諾會減少,Pederson 承諾代表已燒錄的權杖數量。儲存在私人資料收集中的餘額實際值會隨之減少。
  4. 閃爍因子也會更新,因此無論何時,私人資料收集中的餘額與閃爍因子都可用來驗證儲存在公用分類帳中的對應履約承諾。