QRコードに含めるテキスト量の検証(Python,segno)

Oct 6, 2024 08:55 · 2050 words · 5 minute read 小技 Security

先日、とある組織のセキュリティ担当をしている人と雑談していると「QRコードにもそこそこの量のデータを入れることができるので、情報漏洩の経路になりえるのかも?」という話がでました。

QRコードの仕様について知らなかったので、実際にQRコードを作成して検証してみました。

目次

検証準備

今回はPythonでQRコードを作成するツールを使います。 ざっと調べると「pyQRCode」「segno」「qrcode」など、使えそうなライブラリが複数ありました。 今回はTerminalに直接QRコードを出力できるsegnoを選択しました。

インストールとQRコード作成コマンド

pipコマンドでインストールします。

pip install segno

「–compact」オプションをつけると直接TerminalにQRコードが出力されます。

segno --compact "{text}"

検証結果:OCRの方が効率が良さそう

寿限無をQRコードにしてみました。

今回検証に使う寿限無は、ふりがなを含めて1寿限無あたり181文字です。


寿限無 寿限無 五劫(ごこう)のすりきれ 海砂利水魚(かいじゃりすいぎょ)の水行末(すいぎょうまつ) 雲来末(うんらいまつ) 風来末(ふうらいまつ) 食う寝るところに住むところ やぶらこうじのぶらこうじ パイポパイポ パイポのシューリンガン シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの 長久命(ちょうきゅうめい)の長助(ちょうすけ)


QRコードの仕様上、漢字を含む日本語の場合は1,817字までQRコードに含めることができるらしいです。 しかし、作成したQRコードを読み取る側にも仕様以外の制限があるらしく、文字数が多い場合は読み取れませんでした。

iPhoneを使って読み取り可能な文字数を確認したところ、3寿限無543文字位までは作成したQRコードの文字列を読み取れました。 しかし、4寿限無になるとQRードの作成はできるものの、読み取りができませんでした。 おそらく読み取り側のデバイスの仕様によって読み取れるデータ量の上限は変わると思います。

ちなみに今回試した3寿限無はこれくらいの文字量です。


segno –compact “寿限無 寿限無 五劫(ごこう)のすりきれ 海砂利水魚(かいじゃりすいぎょ)の水行末(すいぎょうまつ) 雲来末(うんらいまつ) 風来末(ふうらいまつ) 食う寝るところに住むところ やぶらこうじのぶらこうじ パイポパイポ パイポのシューリンガン シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの 長久命(ちょうきゅうめい)の長助(ちょうすけ)寿限無 寿限無 五劫(ごこう)のすりきれ 海砂利水魚(かいじゃりすいぎょ)の水行末(すいぎょうまつ) 雲来末(うんらいまつ) 風来末(ふうらいまつ) 食う寝るところに住むところ やぶらこうじのぶらこうじ パイポパイポ パイポのシューリンガン シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの 長久命(ちょうきゅうめい)の長助(ちょうすけ)寿限無 寿限無 五劫(ごこう)のすりきれ 海砂利水魚(かいじゃりすいぎょ)の水行末(すいぎょうまつ) 雲来末(うんらいまつ) 風来末(ふうらいまつ) 食う寝るところに住むところ やぶらこうじのぶらこうじ パイポパイポ パイポのシューリンガン シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの 長久命(ちょうきゅうめい)の長助(ちょうすけ)”


また、含める文字数が多くなるにつれて、生成されるQRコードがどんどん巨大になります。 悪い人がデータを持ち出す手段を選択する場合、QRコードを作ってデータを持ち出すよりも画面上のWord Documentなどの写真を撮影する方が効率が良さそうです。 最近のOCRは精度も高いですし、スマホ写真の画質も上がっているので、文字起こしに苦労はしないでしょう。

OCRの誤検知が多そうな場合では役立つかも?

逆にOCRの認識ミスが多そうなデータの受け渡しの場合は、QRコードが便利かもしれません。 例えば「小文字のエル」と「半角数字の1」「大文字のアイ」が混在するような文字列です。

公開鍵や楕円曲線暗号の秘密鍵程度の文字数なら問題なくQRコードの作成と読み取りができるので、鍵の受け渡しで使える場面があるかもしれません。 RSA AES256の秘密鍵はiPhoneでは読み取れませんでした。

実際の運用では、QRコードで鍵情報を渡す機会は少なそうだなとは思います。 ありえそうなパターンとしては、WiFiルーターの認証情報の共有やIoTで管理された自宅扉の鍵の受け渡し、他にはURLや各種IDの伝達あたりでしょうか。

最後に

情報漏洩の観点で、QRコードの検証をしてみました。 仕様上は結構な文字数を含めることができますが、実際のところは読み取り側のデバイスの制限により、そこまで多くの文字列の持ち出しはできなさそうです。

tweet Share