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 文件,立即開始建構您自己的數位身份工具。
💜 小技巧: 加入社群論壇並參與討論,分享您的經驗並向他人學習。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.