VirgilとTwilioを使用して30分で安全なIPメッセンジャーを作成する







こんにちは

エンドツーエンド暗号化を簡単かつ簡単に実装できるコードをすでに示しました。 先に進み、Virgil Securityサービスを使用して安全なIPメッセンジャーを開発しましょう。 組み込みの暗号化を使用して安全なIPメッセンジャーを実装するのは簡単なことではありません。 この記事では、 Virgil APITwilio IPメッセージングAPIを使用して 、このプロセスをより簡単にする方法を説明します。



パート1:準備



メッセンジャーの実装を進める前に、いくつかの準備手順を実行する必要があります。



  1. Twilioアカウントを作成します。 Twilioは、コミュニケーションツールをサービスとして提供する会社です。 Twilioを使用すると、 IPメッセンジャーを開発するタスク大幅に簡素化されます。 しかし、この記事では、私たちの目標ははるかに野心的です。 エンドツーエンド暗号化を備えた安全な(匿名と混同しないで)IPメッセンジャーが必要であることをお知らせします。 したがって、必要なのは...



  2. Virgil Securityアカウントを作成します。 アカウントは、アプリケーションを登録して、Virgil Securityサービスを使用できるようにする秘密キーであるVIRGIL_ACCESS_TOKENを受け取る機会を開きます。


上記の手順を完了すると、以下の一連のパラメーターの所有者になります。
  1. TWILIO_ACCOUNT_SID-Twilioアカウントの識別子(アカウントで利用可能)。
  2. TWILIO_API_KEY-認証に使用される秘密鍵( ここで生成できます )。
  3. TWILIO_API_SECRET-認証に必要な追加の秘密情報( ここで作成)。
  4. TWILIO_IPM_SERVICE_SID-Twilioサービスのインスタンス。アプリケーションに関するすべてのデータを格納します( 参照により作成できます)。
  5. VIRGIL_ACCESS_TOKENは、Virgil Security APIにアクセスできるようにする一意のトークンです。 各APIリクエストにはVIRGIL_ACCESS_TOKENが含まれている必要があります。 こちらで Virgilアプリケーションを作成した後に入手できます
  6. VIRGIL_APP_PRIVATE_KEYは、Virgilアプリケーションの秘密鍵です。 Identity Serviceの使用が望ましくない場合にユーザーの公開鍵を認証するための検証トークンを作成するために使用されます。 秘密鍵は、Virgil Webサイトに入った後、アプリケーションのページでコンピューター上に生成されます。
  7. VIRGIL_APP_PRIVATE_KEY_PASSWORD-すべての秘密鍵は暗号化された形式で保存され、鍵を使用するたびに暗号化のためのパスワードが必要です。


パート2:基本



Twilio IPメッセンジャーでのメッセージの送受信は、チャネルを使用して行われます。 各チャネルは個別のチャットであ​​り、同時にチャットできる人数は無制限です。 Twilio IPメッセンジャーに基づいて、メッセージ暗号化機能の実装の重要な瞬間を示します。



まず、Virgil Securityサービスの使用は、ほとんどすべてのプラットフォームおよびプログラミング言語で可能です。 開発者はさまざまなSDKC#C / C ++Objective-CPythonJava )を利用できるため、Virgil Servicesとの連携が容易になります。 ただし、VIRGIL_ACCESS_TOKENなしでは使用できません。 なぜなら 準備段階ですでにVIRGIL_ACCESS_TOKENを受け取りました。開発に直接進みます。

私たちのメッセンジャーはクライアントサーバー構造を持ちます。 しかし、最も興味深いもの(メッセージの暗号化、送信、復号化)はすべてクライアント側にあり、私たちはそれにほとんどの注意を集中します。



  1. TwilioおよびVirgil API用のJavaScript SDKが含まれています。



    <script src="https://cdn.virgilsecurity.com/packages/javascript/sdk/1.4.6/virgil-sdk.min.js" integrity="sha256-6gsCF73jFoEAcdAmVE8n+LCtUgzQ7j6svoCQxVxvmZ8=" crossorigin="anonymous"></script> <script src="https://media.twiliocdn.com/sdk/js/common/v0.1/twilio-common.min.js"></script> <script src="https://media.twiliocdn.com/sdk/rtc/js/ip-messaging/v0.10/twilio-ip-messaging.min.js"></script>
          
          





  2. サービスを使用して作業を初期化します(サーバーからAPIを使用するためのトークンを取得します)。



     //  Twilio var accessManager = new Twilio.AccessManager('%TWILIO_TOKEN%'); var messagingClient = new Twilio.IPMessaging.Client(accessManager); //  Virgil var virgil = new VirgilSDK("%VIRGIL_ACCESS_TOKEN%");
          
          





  3. Virgil SDKを使用して、新しいユーザーAliceのキーペアを作成します。



     var keyPair = virgil.crypto.generateKeyPair();
          
          





    そして、次のものが得られます。
     -----BEGIN PUBLIC KEY----- MFswFQYHKoZIzj0CAQYKKwYBBAGXVQEFAQNCAAQO8ohmBRyclmcfQ38Lwmvv4Cau jyX6vWn8kJrR0RRfFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END PUBLIC KEY-----​ -----BEGIN EC PRIVATE KEY----- MHkCAQEEIFB+lOUvbb4WX+e3zLkAcYpvZR3qpQI8Ru/tcnciCMkIoAwGCisGAQQB l1UBBQGhRANCAAQO8ohmBRyclmcfQ38Lwmvv4CaujyX6vWn8kJrR0RRfFQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END EC PRIVATE KEY-----
          
          





  4. 通信の他の参加者が暗号化されたメッセージをアリスに送信できるようにするには、彼女の公開鍵をVirgil Keysサービスのキーストアに配置する必要があります。 鍵公開プロセスには、未確認の鍵の作成を防ぐために特別な検証トークンが必要です。 Identity Serviceを使用して、またはVIRGIL_APP_PRIVATE_KEYを使用して自分で(サーバー側で)生成することにより、検証トークンを取得できます。



     VirgilSDK.utils.generateValidationToken( 'Alice', //   'username', //   ( ) VIRGIL_APP_PRIVATE_KEY );
          
          





    検証トークンを受け取ったら、ユーザーの公開キーをリポジトリにロードします。



     var options = { public_key: keyPair.publicKey, private_key: keyPair.privateKey, identity: { type: 'username', value: 'Alice', validation_token: '%VALIDATION_TOKEN%' } }; virgil.cards.create(options).then(function (card){ myCard = card; console.log(card); });
          
          





    上記の手順を完了すると、Virgilカードと呼ばれるアプリケーションのすべてのユーザーがアクセスできるVirgil Keysサービスキーストアに、次のフィールドを含む特別なデータ構造が作成されます。



    作成されたVirgil Cardデータ構造の例:
     { "id":"3e5a5d8b-e0b9-4be6-aa6b-66e3374c05b3", "authorized_by":"com.virgilsecurity.twilio-ip-messaging-demo", "hash":"QiWtZjZyIQhqZK7+3nZmIEWFBU+qI64EzSuqBcY+E7ZtKPwd4ZyU6gdfU/VzbTn6dHtfahCzHasN...", "created_at":"2016-05-03T14:34:08+0000", "public_key":{ "id":"359abe31-3344-453a-a292-fd98a83e500a", "public_key":"-----BEGIN PUBLIC KEY-----\nMFswFQYHKoZIzj0CAQYKKwYBBAGXVQEFAQNCAAQ...", "created_at":"2016-05-03T14:34:08+0000" }, "identity":{ "id":"965ea277-ab78-442c-93fe-6bf1d70aeb4b", "type":"username", "value":"Alice", "created_at":"2016-05-03T14:34:08+0000" } }
          
          





  5. これで、アリスは安全な通信の準備ができました。 このための「一般」チャネルを作成しましょう。



     //    twilioClient.createChannel({ friendlyName: 'general' }).then(function(channel) { generalChannel = channel; });
          
          





  6. 誰でも「一般」チャネルに入り、アリスに暗号化されたメッセージを送信できます。 これを行うために、Virgil Keys Serviceリポジトリでアリスの公開鍵を見つけ、それを使用して秘密メッセージを暗号化します。



     //     Promise.all(generalChannel.getMembers().map(function(member) { //  Virgil Card    return virgil.cards.search({ value: member.identity, type: 'username' }) .then(function(cards){ return { recipientId: cards[0].id, publicKey: cards[0].public_key.public_key }; }); }).then(function(recipients) { var message = $('#chat-input').val(); var encryptedMessage = virgil.crypto.encryptStringToBase64(message, recipients); generalChannel.sendMessage(encryptedMessage); console.log(encryptedMessage); });
          
          





    暗号化されたメッセージは次のとおりです。
    MIIDBQIBADCCAv4GCSqGSIb3DQEHA6CCAu8wggLrAgECMYICvDCCAVoCAQKgJgQkMDg3YjgwYmMtMzNjYi00MTI1LWI4YTgtYTE

    3OTEwM2Y3ZjRkMBUGByqGSM49AgEGCisGAQQBl1UBBQEEggEUMIIBEAIBADBbMBUGByqGSM49AgEGCisGAQQBl1UBBQEDQgAEcd

    8fhKqYlZxvcmmodg7Z3PNhE1LXLJqobouEcRfZaRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAYBgcogYxxAgUCM

    A0GCWCGSAFlAwQCAgUAMEEwDQYJYIZIAWUDBAICBQAEMEaJMAvX7S + 52BpI5hYyFOc0noIc + qdFFrQanNAtNGBAX / Pxeg5yJ2iA

    JijyZ8ut9zBRMB0GCWCGSAFlAwQBKgQQ81bklcNOyU / QTatCigSzoAQwHnAcbXk0daExIIS + sr6aIvVuF / o6j + 1Rs5bvq2WVN41

    k / Oir5x7KZTSR7v3nx + fTMIIBWgIBAqAmBCRmNzM4YTUwNi1hMDYwLTQ1MDgtYTJkYS04NjY1NjZlYzg0ODMwFQYHKoZIzj0CAQ

    YKKwYBBAGXVQEFAQSCARQwggEQAgEAMFswFQYHKoZIzj0CAQYKKwYBBAGXVQEFAQNCAARJ5C3hsYuI2Sf14k60Dz5Mv5yD / AsVA

    zPfsmlreGTC2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBgGByiBjHECBQIwDQYJYIZIAWUDBAICBQAwQTANBglg

    hkgBZQMEAgIFAAQwhu7WM1rff9RYsQ + dmfX9Os3Irwm4cm5bIvUlcGXlCfmEsrjTyTg5MGjYLtxbYtL9MFEwHQYJYIZIAWUDBAE

    qBBCfKdP / gZnkVwJvv4Hdf2eWBDC3czBjV / yPGeGTqBIilHSsrqwK7lVMTBuKR + mR3eNdh + yBIAcOk4rveSUbDuWagDIwJgYJKo

    ZIhvcNAQcBMBkGCWCGSAFlAwQBLgQMfjkCvK3UgXdorcYUmtCHHuSm4yfBacMsniMADAeos7qN7OmNsFU1



    同時に、この記事はテキストメッセージに関するものであるにもかかわらず、バイナリデータ(画像、音声、またはビデオ)を暗号化できることを忘れないでください。



  7. 彼女宛のメッセージを復号化するには、アリスは秘密鍵を使用する必要があります。秘密鍵は彼女と一緒にのみ保存されます。



     //       generalChannel.on('messageAdded', function(message) { //  ,  Card Id    var decryptedMessage = virgil.crypto.decryptStringFromBase64( message.body, myCard.id, keyPair.privateKey ); console.log(message.author + ': ' + decryptedMessage); });
          
          





    そして、メッセージテキストを受け取ります
    ボブ:こんにちはアリス!





パート3:最終



ご覧のとおり、組み込みのエンドツーエンド暗号化を使用したIPメッセンジャーの作成は非常に簡単です。 もちろん、あなたのメッセンジャーは、どんなプログラミング言語でも、どんなプラットフォームでも書くことができますが、暗号化の実装は常にシンプルなままです。



新しいチャンネルを作成し、 リンクを使用してメッセージを暗号化する機能を備えたメッセンジャーのデモ版を見ることができます。



Virgil + Twilio IPメッセンジャーのデモバージョンのソースコードは、 GitHubにあります



さまざまなプログラミング言語でVirgil Securityを操作するためのすべてのチュートリアルは、 ここから入手できます



UPD

ワーカーのリクエストに応じて、説明したメッセンジャーを使用するためのいくつかのオプションをリストします。

  1. インスタントメッセージシステムを独自のアプリケーションに埋め込みます。 これにより、ユーザーはサードパーティのアプリケーションなしで通信できます。



  2. ウェブサイトにメッセンジャーを追加して、販売サービスなどと直接通信します。 サポート。



  3. 組織で使用されるツール(ワークフローシステムなど)にメッセンジャーを追加する。 これにより、社内のコミュニケーションに追加のツールを使用する必要がなくなります。






All Articles