2019 年 3 月

第 34 卷,第 3 期

本文章是由機器翻譯。

[Blockchain]

在 Azure 區塊鏈開發套件中利用智慧型連絡人來驗證電子文件

藉由Stefano Tempesta |2019 年 3 月

引進的區塊鏈網路智能合約已建立遺漏的區塊鏈的早期反覆項目中的商務邏輯層。智能合約提供的功能在執行之前,套用條件式邏輯的交易。儘管如此,智能合約可處理只會儲存在區塊鏈數位交易記錄資料庫的資料。商務程序,不過,很少執行在隔離狀態。他們通常需要與外部系統和裝置的資料整合。

例如,處理程序可能包含分散式的交易記錄資料庫使用資料來源從外部系統、 服務或裝置上起始的交易。外部系統可能需要以回應事件引發以回應驗證邏輯智能合約。本文說明如何自動化文件簽署及驗證工作流程中使用最新版的 Azure 區塊鏈開發套件的 SharePoint (aka.ms/bcdevkit) 保存的檔案雜湊和區塊鏈上的中繼資料數位分類帳。

Azure 區塊鏈開發套件

Azure 區塊鏈開發套件版本,建基於 Microsoft 的無伺服器技術,表示在企業中的區塊鏈技術採用的里程碑。由於區塊鏈開發套件,您現在可以建置解決方案,順暢地將區塊鏈整合最佳的 Microsoft 和協力廠商軟體應用程式。如所述上其版本資訊,此套件的初始版本進行優先順序處理三個索引鍵的佈景主題的相關功能: 連接介面、 將資料和系統整合和部署智能合約和區塊鏈網路。

連線包含通訊通道,例如行動和 Web、 SMS 和語音,以及 IoT 裝置甚至聊天機器人。與特定業務應用程式整合跨越多個系統,包括 SharePoint、 OneDrive for Business,Dynamics 365 的開放原始碼,和任何已啟用 API 的平台,以及舊版的通訊協定,例如檔案系統、 FTP 伺服器或 SQL database。智能合約和區塊鏈網路的部署會協助企業軟體開發,主流的區塊鏈技術,並介紹區塊鏈軟體開發實務中的控管和 DevOps。

區塊鏈開發套件適用於搭配 Azure Logic Apps 和 Flow 提供視覺化設計環境包含 200 個以上的連接器,Microsoft 和協力廠商系統和服務的工作流程。協同作業,它們會大幅簡化存取和關閉-鏈上資料、 處理的數位交易紀錄資料庫所產生的事件及利用 Azure 生態系統,順暢且整合式解決方案的端對端的區塊鏈應用程式的開發。讓我們來探索企業內容管理的內容中的實際應用程式。

簽署數位資產

使用區塊鏈,您可以想像一個文件會內嵌於數位的程式碼與儲存在透明的共用資料庫中,它們正在受保護的刪除、 竄改及修訂。在這個世界裡每一個協議,每個處理序,每個工作中,每個付款會有數位記錄和簽章,無法進行識別、 驗證、 儲存,並共用。律師、 訊息代理程式和機構可能不再是必要的媒介。個人、 組織和機器會免費交易並與其互動與另一個小小的摩擦。這是區塊鏈的無限潛能。

潛在的應用程式的內容更是雪上加霜和散發就很高。使用單一、 不可變且可驗證記錄存放區,其數位身分識別和記錄,將擁有人 — 把身分識別或居住地的文件、 醫療記錄、 教育或 professional 的憑證和授權。所有這些文件和其中繼資料可發行的區塊鏈,必須經過數位簽署。沒有其他假的認證,沒有更多的程度 mills 是,沒有更多的 「 photoshopped 」 文件。

比方說,學生,可套用的進一步研究、 作業或 immigration 至另一個國家/地區;並在程序可能會需要證明其研究的層級或參加 university 的語言的知識。實體,例如招聘人員、 雇主、 政府和大學可以不需依賴中央授權單位驗證學生的認證,只要幾分鐘,並使用任何其他媒介。

[圖 1說明所述的案例。是授權單位所核發,教育 institute (1),例如儲存在集中式文件的管理伺服器 (2),或上的分散式的檔案系統,例如 IPF (ipfs.io) 和密碼編譯的函式使用簽署憑證。我會討論更多關於 IPF 在本文稍後。內容的雜湊和憑證的中繼資料雜湊會接著儲存在區塊鏈數位分類帳 (3),連接至使用者的數位身分識別以儲存此資訊 (4) 的智慧合約位址。這代表一種唯一的真確性語彙基元,用來識別文件的非可疑的方式。

簽章的執行者和程序
圖 1] 的簽章的執行者和程序

常見的模式是產生的數位資產的唯一雜湊和描述它的中繼資料的唯一雜湊。然後會將這些雜湊儲存在區塊鏈。如果文件的真確性曾經書,鏈結外可以將檔案重新雜湊之後,該鏈結上的值相比較的雜湊。文件的雜湊值相符時,如果是真確,但如果只在文件中的字元已經過修改,雜湊不相符,進行明顯已發生變更。

建立簽署的邏輯應用程式流程

讓我們看看可能的實作,此工作流程使用 Azure 邏輯應用程式。邏輯應用程式流程會產生文件和中繼資料的雜湊,並將先前儲存在 SharePoint 和以太坊網路,使用以太坊連接器可供使用的第二個 Azure 區塊鏈開發套件的一部分。在.NET 執行階段堆疊上建立 Azure 函式進行雜湊值計算。函式以範本為基礎 HTTP 觸發程序,並會在接收 HTTP 要求完成後,馬上執行。

中的程式碼**[圖 2**實作 ComputeHashFunction Azure 函式來計算雜湊使用 SHA256 演算法。閱讀後的 Run 方法中的要求主體,此函式會計算使用 SHA256 程式庫 System.Security.Cryptography 命名空間中可用的雜湊。雜湊值會傳回為 UTF8 編碼的字串。

[圖 2 ComputeHashFunction

public static class ComputeHashFunction
{
  [FunctionName("ComputeHashFunction")]
  public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function,
      "get", "post", Route = null)] HttpRequest req, ILogger log)
  {
    string requestBody =
      await new StreamReader(req.Body).ReadToEndAsync();
    string hash = ComputeHash(requestBody);
    return (ActionResult)new OkObjectResult(hash);
  }
  private static string ComputeHash(string data)
  {
    // Create a SHA256 hash
    using (SHA256 sha256 = SHA256.Create())
    {
      byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(data));
      // Convert the byte array to a string
      return Encoding.UTF8.GetString(bytes);
    }
  }
}

新的文件上傳至 SharePoint 網站時,會觸發邏輯應用程式流程。此事件是由其中一個 「 當檔案建立...」 處理SharePoint 連接器上的動作 (如所述**[圖 3**)。若要設定此動作,輸入您的驗證認證 for SharePoint 之後,您必須指定 SharePoint 網站,以監視新的檔案,與特定的資料夾上傳檔案所在的站台位址。您也可以設定的頻率輪詢此資料夾,以及檢查有新檔案。檢查每分鐘一次是合理的設定。

會在 SharePoint 中的檔案建立事件處理邏輯應用程式動作
[圖 3 會在 SharePoint 中的檔案建立事件處理邏輯應用程式動作

流程中的下一個步驟,已預期上, 傳的檔案內容和中繼資料的雜湊。我已實作雜湊函式,為 Azure 函式時,您只需要叫用此函式會是 [選擇 Azure Functions 連接器從 Azure 函式動作。一旦您選取 ComputeHashFunction 中可用函數的清單時,系統將提示您指定將傳遞至函式本身的要求主體。這是將傳送至函數,取得其雜湊值,做為輸出的輸入中的 JSON 物件。我已為檔案的中繼資料,定義下列屬性,如中所示**[圖 4**: contentType、 etag、 識別碼、 名稱和路徑。

雜湊函式的要求主體中的屬性
[圖 4 的屬性,在要求中主體雜湊函式

上一個步驟需要雜湊檔案中繼資料。現在我必須雜湊也整個檔案內容,以保留不變的狀態中的區塊鏈網路中。之前,請新增另一個選擇 Azure 函式動作從 Azure Functions 連接器,但這次,而不是幾個檔案屬性中,選擇 [檔案內容。

一旦您已取得檔案中繼資料和檔案內容的雜湊值,就將它儲存在區塊鏈網路上的時間。基於此目的,我使用 Azure Blockchain Workbench (aka.ms/abcworkbench) 為智能合約以太坊上執行的執行階段環境。預期 Blockchain Workbench 支援多個區塊鏈的平台,但現在我將著重於以太坊。

將訊息傳送至部署為 Blockchain Workbench 方案一部分的 Azure 服務匯流排,就可以取得存取權的數位交易紀錄資料庫。外部系統,例如邏輯應用程式動作可以與智慧合約裡 Blockchain Workbench,將訊息傳送至服務匯流排通訊。Blockchain Workbench 執行階段拾取訊息,並建立新的區塊鏈交易時,包含的訊息。與以太坊通訊可能只能由產生的交易,會叫用的智慧型的合約,如所述**[圖 5**。

將訊息傳送至智慧合約
[圖 5 將訊息傳送至智慧合約

若要從邏輯應用程式流程的訊息傳送到服務匯流排中,您可以使用傳送訊息動作上的服務匯流排連接器。Azure 服務匯流排的連線會識別所連接的名稱和連接字串。您可以輸入任何方便的名稱作為 [連線名稱,以及您從 Azure 入口網站部署位置中取得的服務匯流排連接字串。要傳送至服務匯流排的訊息也會需要下列參數:

  • requestId:邏輯應用程式動作的要求唯一識別碼
  • processedDateTime:正在傳送之要求的時間戳記
  • userChainIdentifier:部署以太坊網路中的使用者地址
  • 應用程式名稱:在以太坊上叫用的智慧合約名稱
  • workflowName:Blockchain Workbench 上叫用工作流程的名稱

我定義這些參數,您可以在邏輯應用程式流程中,變數為使用變數連接器中的初始化變數動作。RequestId 變數可以是設定為 guid,這是運算式,產生的唯一 GUID。ProcessedDateTime 變數可以設 utcNow,代表目前的國際標準時間。如 userChainIdentifier,您可以輸入使用者的地址 Blockchain Workbench,已獲授權執行智慧的合約,而應用程式名稱和 workflowName 根據名稱和處理這筆交易的智慧合約的工作流程定義中。

下一節說明智慧來處理這些邏輯應用程式流程所傳送的訊息合約。[圖 6摘要說明訊息本文,以 JSON 格式,將傳送至服務匯流排。< 嚴重的角括號 > 中的運算式必須具有對應值取代。

[圖 6 傳送至 Azure 服務匯流排的訊息結構

{
  "requestId": "<The requestId variable>",
  "userChainIdentifier": "<User address in Azure Blockchain Workbench>",
  "applicationName": "<Smart contract name>",
  "workflowName": "<Smart contract workflow name>",
  "parameters": [
    {
      "name": "registryAddress",
      "value": "<Contract address in Azure Blockchain Workbench>"
    },
    {
      "name": "fileId",
      "value": "<File identifier>"
    },
    {
      "name": "location",
      "value": "<File path>"
    },
    {
      "name": "fileHash",
      "value": "<File content hash>"
    },
    {
      "name": "fileMetadataHash",
      "value": "<File metadata hash>"
    },
    {
      "name": "contentType",
      "value": "<File content type>"
    },
    {
      "name": "etag",
      "value": <File entity tag>
    },
    {
      "name": "processedDateTime",
      "value": "<The processedDateTime variable>"
    }          
  ],
  "connectionId": 1,
  "messageSchemaVersion": "1.0.0",
  "messageName": "CreateContractRequest"
}

用於處理數位資產智慧合約

首先,我要強調的數位資產不區塊鏈上儲存訊息。檔案中繼資料和內容的雜湊值為。在本文中,我說明文件的儲存在 SharePoint 上,這是集中式的服務。在 「 純 」 的區塊鏈部署中,您可能想要取得的儲存體服務也更是雪上加霜。Redundancy 檔案系統 (IPF) 是對等項目-超媒體通訊協定 (先前所述),提供非集中式的檔案儲存體。與 IPF 整合已超出範圍的這篇文章中,但如果您有興趣了解這項技術如何協助移除集中的存放裝置,不是區塊鏈中的區塊的一部分,您可以參考到 Channel 9 上的 < IPF Azure 中的 「 視訊 (bit.ly/2CURRq0)。

當我執行我的智慧合約使用 Azure Blockchain Workbench,我會需要兩個檔案:

  • 描述智慧合約本身,以在 Solidity 程式設計語言的 FileContract.sol。
  • 設定 Azure Blockchain Workbench,做為應用程式中的工作流程載入 FileContract.json。

FileContract 智慧合約說明透過其中繼資料,由邏輯應用程式傳送到 Blockchain Workbench,透過 Azure 服務匯流排訊息中傳遞的值為基礎的檔案。以下是智慧合約會定義這些參數的原始碼的程式碼片段:

contract FileContract
{
  // File metadata
  string public FileId; // File identifier
  string public Location; // File path
  string public FileHash; // File content hash
  string public FileMetadataHash; // File Metadata Hash
  string public ContentType; // File content type
  string public Etag; // File entity tag
  string public ProcessedDateTime; // Timestamp
  address public User; // User address

若要將檔案中繼資料儲存在區塊鏈中,我需要定義,如下所示檔案結構:

struct File {
  string FileId;
  address FileContractAddress;
}

File 實體識別其檔案識別碼和 FileContract 智慧合約包含中繼資料的區塊鏈上的位址。此結構會儲存在私用集合定義為字典,其索引鍵是檔案識別碼的字串。對應中的關鍵字在 Solidity 定義字典和其索引鍵和值類型,如下所示:

mapping(string => File) private Registry;

若要儲存的檔案實體 (其識別碼和中繼資料),我只要將組成的值加入登錄中字典 Save 方法。為了簡單起見,我也省略了任何必要的控制項上有效的檔案識別碼及合約位址,以及是否檔案已經存在登錄中。請看看下面這個程式碼:

function Save(string fileId, address fileContractAddress) public
{
  Registry[fileId].FileId = fileId;
  Registry[fileId].FileContractAddress = fileContractAddress;
}

驗證程序

需要使用協力廠商驗證其憑證的使用者共用的真確性語彙基元 (也就是檔案合約位址),其中包含所有必要的資訊,以便確認文件存在,而且是真確且無法偽造達到此目的。[圖 7描述合作對象與驗證程序所涉及的動作。使用者擷取憑證來驗證從其位置 (1),並起始新的交易,區塊鏈網路上傳輸的真確性語彙基元 (2) 若要驗證授權單位。授權單位取得帶正負號的內容和驗證 (3),憑證的中繼資料會儲存在不可變的數位交易記錄資料庫,以及然後將它關閉鏈結複製的對等的雜湊值比較。如果兩個值相符時,文件是已驗證 (4)。

驗證動作項目和程序
[圖 7 驗證動作項目和程序

簽署並驗證文件和非結構化的資料之後,和其內容和中繼資料的雜湊會儲存在區塊鏈上 — 它會建立不可變和獨立、 可驗證的交易記錄。此程序稱為證明存在以及數位資產的真實性證明。

建立無法變更的日期和時間戳記,針對特定的物件是指存在的證明。這表示您可以證明,某一特定資訊的物件 — 像是電子郵件、 文件或映像 — 存在於某一點的時間。

物件是真確判斷提示的真確性的概念 — 也就是它已之後未變更其儲存在指定的瞬間。這被透過數位簽章的物件,因而雜湊,其唯一識別碼。然後識別碼取得認可到分散式的區塊鏈交易記錄資料庫和交易取得時間戳記,以及。因為每個項目中的區塊鏈是不可變的這表示您有證明,這個特定的物件存在於某一點時間。

使用相同的方法,物件可驗證及驗證。類似的簽章的程序所述的流程會建立唯一的識別碼,並確認的區塊鏈交易紀錄資料庫對這個唯一識別碼。如果沒有相符項目,智慧合約就會傳回原始的雜湊值。如果沒有,正在驗證的文件不相同的原始複本,且不能信任以隱含方式。因此,就可以超越任何一定中,以證明文件或任何數位的物件,在特定時間也是真確且已經存在。

FileContract 智慧合約公開 GetFile 方法,在輸入中,指定的檔案識別碼的區塊鏈會傳回其合約位址。從檔案合約位址,就可以取得檔案內容和中繼資料的雜湊值,並比較它們使用雜湊值的文件,就像這樣:

function GetFile(string fileId) public constant
returns(address fileContractAddress)
{
  return Registry[fileId].FileContractAddress;
}

總結

為何要使用來簽署與驗證數位資產,當解決方案電子簽章已存在,且會廣泛採用業界的區塊鏈?簡單地說,區塊鏈移除中央憑證授權單位或加拿大中部時間戳記伺服器的需求,並啟用儲存在獨立正要簽名之物件存留的區塊鏈上的數位簽章。這會開啟為平行簽署與驗證,請使用或不是物件本身的機會。

傳統電子簽章的解決方案會儲存在文件的數位簽章。這表示必須勾選 [是否會簽署文件的人員都必須在文件中的所有內容的完整讀取權限。此外,因為文件變更時,每個簽章,來簽署文件,以平行方式不可能 — 每個人都必須以循序方式簽署文件。透過簽章區塊鏈上的文件,物件本身不會變更所簽章,,,這可讓您登入以平行方式的文件和實作商務規則根據規定、 4 眼睛,大部分的投票,seniority 等。

最後,但較不重要的是,您可以註冊多個動作上的區塊鏈序列中。每個註冊連結到特定的案例、 文件和相關各方,建立交易鏈結所執行的工作: 的可稽核記錄。此稽核記錄可以經過授權的協力廠商提供了透明度,合規性,而最重要的是,信任。

若要深入了解 Azure 區塊鏈開發套件,您可以找到一堆影片 Channel 9 上的 「 交談區塊 」 的節目 (aka.ms/bcblocktalk)。如果您想,您可以也隨時掌握最新公告 Azure 區塊鏈產品小組依照 @MSFTBlockchain Twitter 控制代碼 (twitter.com/MSFTBlockchain)。

Azure 區塊鏈開發套件 」 專案歡迎您貢獻和建議的內容。大部分投稿都需要您同意以參與者授權合約 (CLA),宣告您有權限,並實際執行動作,授與 Microsoft 使用您投稿的權限。當您提交提取要求時,CLA bot 會自動判斷您是否需要提供 CLA 並適當地裝飾要求 (也就是,加上標籤,或您的程式碼註解)。


Stefano Tempesta是 Microsoft 區域經理、 MVP AI 及商務應用程式和區塊鏈委員會 (英文) 的成員。在國際 IT 研討會發表演說,包括 Microsoft Ignite 和 Tech Summit 發言,Tempesta 的興趣會延伸到區塊鏈和 AI 相關技術。他會建立 「 Blogchain 空間 」 (blogchain.space),區塊鏈技術的相關部落格 MSDN Magazine 和 MS Dynamics 世界中,將寫入,並將發佈在 Azure AI 資源庫上的機器學習服務實驗。

非常感謝下列技術專家檢閱這篇文章:Jonathan Waldman