QRコード®とSQRC®は株式会社デンソーウェーブの登録商標です。
TL;DR
SQRC®の仕様を解析しました。
SQRC®に対応したQRコード®読み取りアプリQRAnalyzerを制作しました。
前回のあらすじ
俺は大学生ニート、[ここに本名を入れます]。
京急線に遊びに行って、扉に貼られていた怪しげなQRコード®を目撃した。
仕様を解析するのに夢中になっていた俺は、背後から近づいてくるもう一人の都営浅草線に気づかなかった。
俺はそこでたらふく情報を得、シラフに戻ったら…
ブログを書いていた!(ここで声が変わる)
たった一つの真実見抜く、見た目は28歳、本当は21歳、その名は月鉈オリエット!
経緯
前回tQR®コードを調査しているときに、SQRC®というものを見つけました。
公式サイトやQRコードドットコムによれば、普通のQRコード®の裏に非公開データが格納されているそうです、面白そうですね(暗黒微笑)。
デンソーウェーブに用途/実績例を問い合わせると、SQRC®活用事例として以下の活用事例を紹介していただきました。
閲覧にはログインが必要です。
広島県集団検診協会様事例|導入事例|活用事例|自動認識 | デンソーウェーブ
株式会社トヨタオートモールクリエイト様事例|導入事例|活用事例|自動認識|デンソーウェーブ
またB2Bデータベースサイトのイプロスにも出品されていて、
用途/実績例 電子チケット(劇団四季様)など
セキュリティ機能搭載QRコード SQRC デンソーウェーブ | イプロスものづくり
とのことなので、民間では劇団四季・トレッサ横浜・広島県集団検診の3つの導入先を見つけることができました。
劇団四季のヘルプページの内容もSQRC®の特徴と合致します。
QRチケットを携帯等で読み取りましたが、「SHIKI」としか表示されません。
広島県に検診を受けに行くのは大変なので、トレッサ横浜と劇団四季に行ってきました。
なおこの記事の下書きは旧ブログ時代から温めていたのですが、最近(2022/11/01)JCBのナンバーレスカードにも採用されたということで非常にタイムリーな記事となりました。現在カードの発送待ちです。届きました。
JCBナンバーレスカードの発行を開始|JCBのプレスリリース
SQRC®を発展させ顔データを暗号化して格納した顔認証SQRCの活用例としては工場等が挙げられているので、この技術は民間よりは企業内部で使われている気がします。
顔認証SQRC|QRコードソリューション|システムソリューション|デンソーウェーブ
また公的機関ではつくば市や宝塚市の窓口業務に導入されています。どちらも入力時にはデータを保存・送信せずにSQRC®に入力データを格納して窓口のリーダで読み取ることで手入力の手間の削減とプライバシーの保護を両立しています。よってSQRC®の作成自体はWeb上で可能です。
その他にもWeb上で情報収集を行い、藤川らの「公開/秘密情報を格納したnearly invisibleな2次元コードをセラミックス製品に焼き付ける方法の提案とその評価」という論文を拝読し、その中から2つのSQRC®を収集しました。
SQRC®を公式サイトと合わせて3つ収集し、格納方式のアタリを付けました。
結論から言うと公開データの最後のnull的な物の後に暗号化したデータを入れている感じでした。
それでいうと福地さんの研究に近しい技術です。
暗号方式はDESです。
なおこれらのSQRC®はデフォルト鍵0123456789ABCDEF
で暗号化されているため、公式QRコードリーダ「クルクル」で読み込むことができます。

SQRC®や後述のフレームQR®は機内モードだと読み込めないことからも察せますが、APIを叩いてます。
しかしQRQRは効果測定と称しQRコード®を読み込んだ人の個人情報を送る場合があるので、APIは使いたくありません。
「公式」QRコードリーダーを使うと読み取り時の位置情報がQRコード作成者に提供される | スラド Submission
具体的にはクルクルマネージャーでシークレット方式でアクセス解析を有効にして作成したQRコード®をQRQRで読むと位置情報等がサーバに送信されます。追跡データは隠されているのでそのことを知る由はありません。
これは好ましくないのでアプリQRAnalyzerを制作しました。
QRコード®はもちろん骨の髄まで情報を得られ、裏に隠されたデータも暴け、SQRC®も鍵を設定すれば読めます。
読むだけで勝手に何かをすることもないので安心して使うことができます。
自作のテスト用SQRC®とその読み取り結果を以下に示します。


SQRC®の構造
SQRC®公式サイトに例示されているQRコード®(以下「電波」)をZXingのgetRawBytes()等で生データとして読み込むと、普通のデータの後に6から始まるデータが存在します。それが暗号化されたデータです。
具体的に、電波の格納データは以下のようになっています。
101C0C5658 00 6 15 29F59B9057F5038F 15AB100B253EC0C4 4D028AEA0D 0 EC11EC11EC11EC
101C0C5658
は公開データ0123456
で、続いて00
が一旦入り、6 15
は長さ0x15=21バイトの非公開データのヘッダです。
半バイトずれつつ、29F59B9057F5038F 15AB100B253EC0C4 4D028AEA0D
が暗号化された非公開データです。
0
というフッタで終了し、11
とEC
の繰り返しはQRコード®と同様の埋め草バイトです。
他の情報源を当たると鍵は0123456789ABCDEF
という如何にもデフォルトな鍵で、この鍵でDES-CBCを使用して暗号化されていています。IVは0です。
ただし、容量節約のためかパディングはせず、電波のように格納データ長が8の倍数ではなかった場合には特殊な処理を行います。
その特殊な処理が奇抜で、最後に暗号化したときのDESのf関数の出力をずらしながらXORして畳み込んだものとXORします。
図にするとこのようになります。

平文P、暗号文C、鍵K、暗号化関数E、チェックサムSと置きます。
P1、P2は8バイトですが、P3は8バイトに満たないとします。C1とP2をXORしたものを暗号化したときのDESの16個のf関数の出力をずらしながら畳み込んだものを、C2とP3を左詰めでXORしたものにXORします。
畳み込み方は文章や図よりもプログラムを見たほうが分かりやすいと思います。畳み込んだ値をa、DES暗号のf関数の32ビット(4バイト)づつの出力を順番に格納した長さ16の配列をYとするとPythonで以下のように導出されます。
a = bytearray(8)
for i in range(16):
for j in range(8):
a[j] ^= Y[i][(i+j)%4]
print(a.hex())
故意か偶然か不明ですが、aは前半と後半の4バイトが全く一緒になります。このことが一部の長さのSQRC®で情報の漏出を引き起こします。
そしてチェックサムとして平文の最後に、平文と鍵を連結したもののCRC16を取りリトルエンディアンでくっつけます。
ここで連結する鍵はパリティ付きの64ビットのものなので、パリティ違いの鍵は復号時に弾かれます。
最後に注意ですが、SQRC®は特許を取得しているため業として実施することは侵害に当たる可能性があります。
話したい話
New!(2023/05/08)劇団四季のパスワードの解析が終わった話
劇団四季のチケットをWebから収集した話
トレッサ横浜のトレッサマネーを登録した話
何の略称かが文献によってデンソーウェーブ内でも「シークレットQRコード」だったり「セキュリティQRコード」だったりする話(個人的には「シークレット」が適当だと思います)
https://www.denso-wave.com/ja/system/office/product/reception.html
公式が「※本機能はコードデータのセキュリティ性を保証するものではありません。」と断っている話
https://www.denso-wave.com/ja/system/qr/fundamental/qrcode/sqrc/index.html
SQRC®に似たフレームQR®というものが存在する話(同じくQRQRで読めるがデコードにAPIが必要)
https://www.denso-wave.com/ja/system/qr/product/frame.html
更にフレームQR®を使ったMapQRなるものが存在する話
デンジャーゾーン(批判的な内容)
当初はバーコードリーダー販売をビジネスの出口にしようとしたが、携帯電話やスマートフォンなどの読み取り機能が普及したため、バーコードリーダー販売をビジネスの主軸に据えることは困難になった。
(中略)
フレームQRは作成から解読まで、全てQ-revoサーバー上で行われるため、作成者や作成日時はもちろん、読み取り日時や読み取られた位置情報までサーバーに保存される。
https://www.businessinsider.jp/post-162417
デンソーウェーブはQRコード®の特許をオープンにしリーダで儲けを出そうとしたが、スマートフォン等で簡単に読み取れるようになって、読み取りにAPIを強制することによって一元化を図っている。
アララはその片棒を担いで個人情報を収集している。
開発時には既に危殆化していたDESを使用しているため現実的な時間で解読可能な上、不適切な暗号使用(IVが0、独自の暗号拡張)によって平文の部分情報の漏出とごく短時間での鍵の解析が可能である。
偽造不可能(非公開部を含めた再生成が不可)
http://asist.ssr.titech.ac.jp/wp-content/uploads/1fc4abe8d31f4aa8f031fe50bcdcc4a7.pdf
何故猫も杓子も仕様が非公開のSQRC®の安全性を盲信しているのか理解に苦しむ。シングルDESを使用しているのだとは夢にも思っていないのだろう。