Virgilで暗号化されたSMSメッセージを送信します







こんにちは、Habr!

WhatsAppやTelegramなどのモバイルメッセンジャーの人気が高まっているにもかかわらず、古き良きSMSの関連性は失われません。 SMSは、2要素認証またはパスワードのリセット時に、さまざまな種類の通知を送信するために使用できます。 しかし、最近のモバイルネットワークへの攻撃の成功により、SMSを介して送信されるデータに対する追加の保護レベルを考えています。

この記事では、VirgilおよびTwilioサービスを使用して、AndroidデバイスにSMSを送信するプロセスを安全にする方法について説明します。



プログラミングを開始する前に、いくつかの予備ステップをもう一度思い出します。

SMSを送信するには、 ここで Twilioアカウントを作成する必要があるアクセスのためにTwilio APIを使用します 。 登録後、APIの操作に必要な特別な識別子TWILIO_ACCOUNT_SIDおよびTWILIO_AUTH_TOKENを受け取ります。



SMSメッセージを暗号化するには、 Virgilアカウントを作成し、特別なトークンVIRGIL_ACCESS_TOKENを生成する必要があるVirgil Crypto LibraryとVirgil Keys Serviceの助けが必要です。



上記の手順を完了したら、SMS通知の実装に進むことができます。

Virgilサービスには、ほとんどの一般的なプログラミング言語で使用できるSDKの大きなセットがあります。 前の記事で、JavaScriptを使用してサービスを操作する方法を示しました。 今日、変更のために、 C#で投稿します。



暗号化されたSMSを送受信するプロセスを段階的に説明します。



  1. NuGetパッケージマネージャーを使用してVirgilとTwilio SDKをインストールします。



    PM>インストールパッケージVirgil.SDK

    PM> Install-Package Twilio



  2. VirgilおよびTwilio APIで動作するようにクライアントを初期化します。



    //   Twilio  string accountSid = "%TWILIO_ACCOUNT_SID%"; string authToken = "%TWILIO_AUTH_TOKEN%"; //  Twilio API  var twilio = new TwilioRestClient(accountSid, authToken); //  Virgil ,    var virgil = ServiceHub.Create("%VIRGIL_ACCESS_TOKEN%");
          
          





    変数accountSidおよびauthTokenに注意してください。 それらには、 ここにあるTwilioアカウントの識別子を示しています



  3. Twilioサービスへの通常のPOSTリクエストを使用して、暗号化されたメッセージの送信を実装します(パーティーに参加するためのパスワード付きの招待状を送信します)。



     //    SMS  var people = new Dictionary<string,string>() { {"+14XXXXXXXX1","Darth Vader"}, {"+14XXXXXXXX2","Luke Skywalker"}, {"+14XXXXXXXX3","Princess Leia"} }; //      Virgil Keys Service var peopleCards = await Task.WhenAll(people .Select(it => virgil.Cards.Search(number))); foreach (var personCards in peopleCards) { //   ,   var personCard = personCards.OrderBy(it => it.CreatedAt).Last(); var personName = people[personCard.Identity.Value]; //  ,        //       ( ). using (var tinyCipher = new VirgilTinyCipher(120)) { var message = $"Hey {personName}, your security word is STAR. We are waiting for you!"; var messageData = Encoding.UTF8.GetBytes(message); tinyCipher.Encrypt(messageData, personCard.PublicKey.Value); //   ,   ,    SMS  //  160-  (120   base64 ). for(int index = 0; index < tinyCipher.GetPackageCount(); index++) { var encryptedMessage = Convert.ToBase64String(tinyCipher.GetPackage(index)); //      Twilio API twilio.SendMessage( SMS.Constants.TwilioPhoneNumber, //  ,  Twilio   SMS personCard.Identity.Value, //    encryptedMessage); } } }
          
          





  4. 受信者側でメッセージを解読します。 SMSを受信するには、Android SMS APIを使用します。 メッセージを復号化するには、Virgil SDK for .NETも必要です。



     //  ,        120 . var tinyCipher = new VirgilTinyCipher(120); //  message    private void OnSmsReceived(string from, string message) { //     ,       //  ,      . this.tinyCipher.AddPackage(Convert.FromBase64String(message)); if (this.tinyCipher.IsPackagesAccumulated()) { var decryptedData = this.tinyCipher.Decrypt(this.myPrivateKey); var decryptedMessage = Encoding.UTF8.GetString(decryptedData, 0, decryptedData.Length); this.tinyCipher.Reset(); Application.Current.MainPage.DisplayAlert($"From: {from}", decryptedMessage, "Got It"); } }
          
          







TwilioとVirgil APIでわかるように、暗号化されたSMSの送受信は、暗号化の深い知識を必要としない単純なタスクになります。



PS



GitHubで暗号化されたSMSの送信を実装するソースコードをダウンロードできます。



All Articles