why-we-open-sour-c1f013bf.webp
alt: 建立數位身份工具 - 為什麼我們將 SSI 開源

relative: false

自我主權身份(Self-Sovereign Identity,SSI)是一種讓個人與組織能夠掌控自身數位身份,並在不依賴中央機構的情況下分享已驗證憑證的框架。這項典範轉移賦予使用者更高的隱私權與對個人資料的掌控,同時也提供穩健的機制來驗證憑證的真實性。

什麼是自我主權身份(SSI)?

SSI 建立在去中心化識別符(Decentralized Identifiers,DIDs)與可驗證憑證(Verifiable Credentials)的概念之上。DIDs 是由所代表實體所控制的唯一識別符,使其能夠管理自己的身份資料。可驗證憑證則是由一方發行並由另一方驗證的數位聲明,確保所分享資訊的真實性與完整性。

為什麼我們要開源 SSI SDK?

開源 SSI SDK 是一項由多重因素驅動的策略性決策。首先,在社群內促進創新對於推動數位身份領域的發展至關重要。透過將 SDK 開放給所有人使用,我們鼓勵合作與實驗,進而產生新的想法與改進。

其次,促進透明度對於建立數位身份系統的信任至關重要。開源專案讓他人能夠檢視原始碼、理解其運作方式,並找出潛在的漏洞。這種透明度有助於建立對 SDK 安全性與可靠性的信心。

最後,讓更廣泛的社群能夠貢獻並受益於安全的數位身份解決方案,符合我們將這些技術民主化的使命。透過降低進入門檻,我們希望賦能更多開發者與組織採用並改進我們的工作。

SSI SDK 的主要功能有哪些?

SSI SDK 提供了一套完整的工具,用於建構數位身份應用程式。以下是其主要功能:

  • 去中心化識別符(DID)管理:使用各種方法(包括基於區塊鏈的解決方案)建立、解析和管理 DIDs。
  • 可驗證憑證的發行與驗證:以加密保證發行與驗證憑證,確保資料完整性與真實性。
  • 區塊鏈整合:在區塊鏈網路上儲存與擷取憑證,利用其不可變性與安全性功能。
  • 可擴展架構:將 SDK 設計為模組化且可擴展,讓開發者能夠整合自訂元件與協定。
  • 跨平台相容性:確保 SDK 能在不同的作業系統與程式語言上運作,為各種使用情境提供彈性。

安全考量

在任何數位身份系統中,安全性至關重要。以下是使用 SSI SDK 時需要考量的關鍵事項:

  • 加密運算:確保所有加密運算都能正確且安全地執行。使用成熟的函式庫並遵循金鑰管理的最佳實務。
  • 私密金鑰保護:切勿暴露私密金鑰。應將其安全地儲存,最好使用硬體安全模組(HSMs)或安全 enclave。
  • 憑證驗證:驗證所有憑證與簽章,以防止偽造與竄改。實作強健的驗證流程以確保資料完整性。
  • 定期稽核:執行定期安全稽核與漏洞評估,及時找出並解決潛在問題。

⚠️ 警告: 請務必保持 SDK 與相依套件為最新版本,以防範已知漏洞。

如何使用 SSI SDK 實作可驗證憑證?

實作可驗證憑證涉及多個步驟,從建立 DIDs 到發行與驗證憑證。以下是幫助您入門的逐步指南:

步驟 1:設定您的環境

在開始之前,請確保已安裝必要的工具與相依套件。SSI SDK 通常需要 Node.js 與 npm(Node 套件管理員)。

# Install Node.js and npm
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# Verify installation
node -v
npm -v

Enter fullscreen mode Exit fullscreen mode

步驟 2:安裝 SSI SDK

使用 npm 安裝 SSI SDK。您可以在 官方 GitHub 儲存庫 找到最新版本。

# Install the SSI SDK
npm install @yourorg/ssi-sdk

Enter fullscreen mode Exit fullscreen mode

步驟 3:建立去中心化識別符(DID)

使用 SDK 建立 DID。此識別符將作為您數位身份的基礎。

const { DID } = require('@yourorg/ssi-sdk');

// Create a new DID
const did = await DID.create();
console.log('Generated DID:', did.didString);

Enter fullscreen mode Exit fullscreen mode

步驟 4:發行可驗證憑證

建立 DID 後,您就可以發行可驗證憑證。這些憑證經過數位簽章,可與他人分享。

const { Credential } = require('@yourorg/ssi-sdk');

// Define the credential payload
const credentialPayload = {
  '@context': ['https://www.w3.org/2018/credentials/v1'],
  type: ['VerifiableCredential', 'UniversityDegreeCredential'],
  issuer: did.didString,
  issuanceDate: new Date().toISOString(),
  credentialSubject: {
    id: 'did:example:123',
    degree: {
      type: 'BachelorDegree',
      name: 'Bachelor of Science in Computer Science'
    }
  }
};

// Issue the credential
const credential = await Credential.issue(credentialPayload, did.privateKey);
console.log('Issued Credential:', JSON.stringify(credential));

Enter fullscreen mode Exit fullscreen mode

步驟 5:驗證可驗證憑證

為了確保憑證的真實性,請驗證其簽章與其他屬性。

// Verify the credential
const isValid = await Credential.verify(credential);
console.log('Credential is valid:', isValid);

Enter fullscreen mode Exit fullscreen mode

步驟 6:儲存與擷取憑證

您可以將憑證儲存在區塊鏈網路或其他安全儲存解決方案上。SDK 提供與各種區塊鏈平台互動的工具。

const { BlockchainStorage } = require('@yourorg/ssi-sdk');

// Initialize blockchain storage
const storage = new BlockchainStorage('https://your-blockchain-node.com');

// Store the credential
await storage.storeCredential(credential);

// Retrieve the credential
const storedCredential = await storage.getCredential(credential.id);
console.log('Stored Credential:', JSON.stringify(storedCredential));

Enter fullscreen mode Exit fullscreen mode

🎯 重點摘要

  • 建立 DIDs 來管理數位身份。
  • 使用加密簽章發行與驗證可驗證憑證。
  • 在區塊鏈網路上安全地儲存與擷取憑證。
  • 遵循安全與金鑰管理的最佳實務。

SSI SDK 與其他身份解決方案的比較

方法 優點 缺點 適用情境
SSI SDK 去中心化、安全、彈性 需要技術專業知識 建構自訂身份解決方案
集中式身份提供者 易於整合、廣泛支援 缺乏使用者控制、隱私疑慮 快速實作、現有生態系統
傳統 PKI 成熟、可信賴的基礎架構 集中式、較不彈性 傳統系統、受管制環境

快速參考

📋 快速參考

  • DID.create() - 產生新的去中心化識別符。
  • Credential.issue(payload, privateKey) - 發行可驗證憑證。
  • Credential.verify(credential) - 驗證可驗證憑證。
  • BlockchainStorage.storeCredential(credential) - 在區塊鏈上儲存憑證。
  • BlockchainStorage.getCredential(id) - 從區塊鏈擷取憑證。

真實世界範例

讓我們透過一個真實世界的範例,說明如何使用 SSI SDK 為大學畢業生建立數位身份並發行可驗證學位憑證。

步驟 1:為畢業生產生 DID

const graduateDID = await DID.create();
console.log('Graduate DID:', graduateDID.didString);

Enter fullscreen mode Exit fullscreen mode

步驟 2:發行學位憑證

const degreeCredentialPayload = {
  '@context': ['https://www.w3.org/2018/credentials/v1'],
  type: ['VerifiableCredential', 'UniversityDegreeCredential'],
  issuer: 'did:example:university',
  issuanceDate: new Date().toISOString(),
  credentialSubject: {
    id: graduateDID.didString,
    degree: {
      type: 'BachelorDegree',
      name: 'Bachelor of Science in Computer Science'
    }
  }
};

const degreeCredential = await Credential.issue(degreeCredentialPayload, 'universityPrivateKey');
console.log('Degree Credential:', JSON.stringify(degreeCredential));

Enter fullscreen mode Exit fullscreen mode

步驟 3:驗證憑證

const isDegreeValid = await Credential.verify(degreeCredential);
console.log('Degree Credential is valid:', isDegreeValid);

Enter fullscreen mode Exit fullscreen mode

步驟 4:將憑證儲存在區塊鏈上

await storage.storeCredential(degreeCredential);
console.log('Degree Credential stored on blockchain.');

Enter fullscreen mode Exit fullscreen mode

步驟 5:擷取並驗證已儲存的憑證

const retrievedDegreeCredential = await storage.getCredential(degreeCredential.id);
console.log('Retrieved Degree Credential:', JSON.stringify(retrievedDegreeCredential));

const isRetrievedDegreeValid = await Credential.verify(retrievedDegreeCredential);
console.log('Retrieved Degree Credential is valid:', isRetrievedDegreeValid);

Enter fullscreen mode Exit fullscreen mode

最佳實務: 擷取後請務必驗證憑證以確保其真實性。

常見問題排解

以下是使用 SSI SDK 時可能遇到的常見問題及其解決方法:

問題:簽章無效錯誤

現象: 驗證憑證時收到「invalid signature」錯誤。

解決方法: 確保用於簽署憑證的私密金鑰與發行者 DID 所關聯的公開金鑰相符。請仔細檢查金鑰管理流程以避免不符。

問題:區塊鏈儲存失敗

現象: 將憑證儲存在區塊鏈上時因網路錯誤而失敗。

解決方法: 確認區塊鏈節點 URL 正確且網路可存取。檢查是否有任何網路連線問題或防火牆規則阻擋連線。

問題:DID 解析失敗

現象: 解析 DID 時傳回錯誤,指出找不到該 DID。

解決方法: 確保 DID 解析器已正確設定,且 DID 已妥善註冊。請檢查 DID 方法與網路設定以確認相容性。

結論

透過開源我們的 SSI SDK,我們希望賦能開發者與組織建構安全、去中心化的數位身份解決方案。SDK 提供了一套穩健的工具,用於管理 DIDs、發行與驗證可驗證憑證,以及與區塊鏈網路整合。遵循安全與金鑰管理的最佳實務,可確保數位身份的完整性與真實性。

就是這麼簡單、安全且有效。深入研究 SDK 文件,立即開始建構您自己的數位身份工具。

💜 小技巧: 加入社群論壇並參與討論,分享您的經驗並向他人學習。