web-dev-qa-db-ja.com

安全な/暗号化されたQRコード

暗号化されたQRコードを生成できるアプリケーションはありますか?

QRコードの暗号化に関する文献はあまりありません。クライアントが暗号化された情報を送信できるものを実装することを検討しており、サイトでそれらをスキャンします。

このようなプロジェクトに関わったことはありますか?

13
andreas

他の回答では、QRコードを使用してURLをエンコードし、そのURLのサービスが必要な認証/セキュリティを提供することを確認できます。クライアントとの通信に使用しているチャネルがデジタルでインターネットに接続されている場合、それは理にかなっているかもしれません...そしてそれが理にかなっている場合は、QRコードはまったく必要ありません。URLを送信するだけです。 Tadmasが指摘したように、QRは単なるエンコーディングです。

ただし、元の質問から、使用しているチャネルはアナログ(紙??)、またはデジタルであるがインターネットに接続されていない(紙のオリジナルまたはスクリーンショットのデジタル写真、または??)と推測します。これは最も一般的なユースケースではなく、このフォーラムのほとんどの回答者が自然に検討するものではありませんが、現実的なユースケースを想像することができます。それが発生する可能性のある請求書または支払いデータの場合。

それが本当なら-何らかの理由で実際のデータを非インターネットチャネルを介して送信する必要があり、実際のデータをQRコード形式でラップする必要がある場合は、これを行う別の方法があります。

明らかなアプローチ(ハイレベル)は次のようになります

message
   --> (compress) --> compressed message 
      --> (encrypt) --> encrypted compressed message
         --> (QR encode) --> QR of encrypted compressed message
            ... send over channel ...
      encrypted compressed message <-- (QR decode) <--
   compressed message <-- (decrypt) <-- 
message <-- (decompress) <--

主な課題は、目的に合った圧縮および暗号化アルゴリズムを選択することです。

よく注意してください、暗号は非自明であり、敬意と注意を払ってアプローチし、何かを一緒に叩くだけではありません...

暗号化する前に圧縮することがベストプラクティスです。一部の暗号化アルゴリズムは圧縮を実行するため、これは必ずしも個別の手順として必要なわけではありません。たとえば、PGPは暗号化する前にデータを圧縮します。他の人はしません。確信が持てない場合、またはアプローチを一般的にする必要がある場合(暗号化アルゴリズムのさまざまな選択に対応)、いつでも圧縮できます。それは安全ですが、時には無意味です。

暗号化アルゴリズムの選択には多くの意味があります(キー管理など-大きなトピック)。ただし、その影響の1つは、QRコードに特に関係があります。つまり、暗号化ステップによってメッセージがどれだけ肥大化するかです。 QRコードブロックの容量は、それぞれ8ビットの2953バイトに制限されています。送信するメッセージがこの制限に近い場合は、出力サイズが入力サイズと等しい暗号化アルゴリズムを選択することをお勧めします(AESは一例です)。メッセージがこの制限よりもはるかに小さい場合は、これを気にする必要はありません(たとえば、肥大化したPGPを使用できます)。

あなたとあなたのクライアントの両方で機能する圧縮および暗号化アルゴリズム(およびキーを配布するための安全な方法など)を見つけることができれば、元の要求を満たすのは特に難しいとは思いません。 QRコード自体を暗号化しようとしないでください(用語が実際に意味をなすかどうかはわかりません)。代わりに、データを圧縮して暗号化し、結果の暗号化されたデータをQRエンコードします。何もありません。

21
Chris Johnson

QRコードは、本質的にはバイトをエンコードするだけです。それらのバイトはあなたが望むものなら何でもかまいません。それらはいくつかのデータの暗号化である可能性があります。問題は、リーダーアプリケーションがそれがバイトの性質であり、それをどう処理するかを知っているかどうかです。

そして問題は、そうではないということです。 QRコード仕様などで定義されている「セキュアQRコード」などのスキームはありません。したがって、そこにあるリーダーは、ガベージテキストの文字列を表示する以外に何もしません。

何をすべきかを知っている独自のカスタムリーダーを書くことはできますが、これは完全に実行不可能だと思います。

だから、@ Danは正しいです。これを行う正しい方法は、認証に挑戦するWebサーバーへのリンクをエンコードすることです。

クライアントにあなたへの通信を暗号化させたいのなら、なぜそれをQRコードでラップする必要があるのですか?暗号化してHTTPS経由で送信するだけです。 QRコードを送信することも考えられますが、データの代わりにデータの画像を送信するようなものです。それは本当に意味がありません。

8
Sean Owen

有る! (質問を誤解し、「ありません」と言う上記の複雑な方法にもかかわらず)。

答えはAndroid QRDroidと呼ばれるアプリです。これは一般的なQRコードリーダーおよびジェネレーターです。

QR Droidは、QRコード(プレーンキーボードテキストからのものを含む)を作成し、オプションで、要求されたキーワードを使用して暗号化されたコンテンツでバリエーションを作成できます。これはこの特定のアプリの機能であり、QRではないため、このアプリは暗号化されたQRコードを読み取って復号化するために必要です(スキャン後に復号化するためのキーを要求します)。

これは、ユーザー名/パスワードを作成して、必要なときに(QR Droid経由でのみ)解読できるようにするための便利な方法です。

あ、はい。暗号化されたコンテンツでQRコードを生成できるアプリケーションがあります。 Androidアプリ:QRドロイドです。

7
mijj

「暗号化された」QRコードは実際には必要ありません。情報がWeb上でホストされている場所、つまり暗号化されていることを確認する必要があります。

3
Dan