テクニック

2進数暗号の読み方・解き方入門

更新: 真鍋 奏人
テクニック

2進数暗号の読み方・解き方入門

2進数暗号は、0と1の二種類だけで数を表し、その数を文字に戻して読む謎解きの定番ギミックです。謎検1級を持ち、累計300回以上イベントに参加してきた筆者も、初めて0と1の羅列を見たときは一瞬固まりましたが、正体が分かれば怖くありません。

2進数暗号は、0と1の二種類だけで数を表し、その数を文字に戻して読む謎解きの定番ギミックです。
謎検1級を持ち、累計300回以上イベントに参加してきた筆者も、初めて0と1の羅列を見たときは一瞬固まりましたが、正体が分かれば怖くありません。
見た目が●○や■□に変わっていても、記号が二種類しかないならまず2進数を疑い、右から1、2、4、8、16…と重みを振って1の桁だけ足せば、紙とペンで確実に解けます。
さらに、1ブロックが5桁ならA〜Zの変換、8桁ならASCIIを見分けるだけでよく、桁数で切り分ける判断軸さえ押さえれば、解読の流れはぐっと整理しやすくなるでしょう。

2進数暗号とは何か:0と1で文字を隠す仕組み

2進数暗号は、0と1の2種類だけで数を表し、その数を使って文字を隠す仕組みです。
見た目は数字遊びに見えても、実際には「文字をいったん数字にし、さらに2進数へ直す」二段構造になっています。
だから解く側は、その逆順で読み戻す発想を持つと一気に見通しがよくなるでしょう。

10進数と2進数の違いをひと言で

10進数は0〜9の10種類の数字を使い、2進数は0と1の2種類だけで数を表します。
違いは使える記号の数だけで、計算の世界がまるごと別物になるわけではありません。
桁が1つ上がるごとに値が2倍になるので、右から1、2、4、8、16…と重みが並ぶのが読み解きの土台になります。

この仕組みは、情報の授業で初めて習ったときは地味に見えても、暗号として見ると急に面白くなります。
たとえば1101なら8+4+0+1で13、01010なら8+2で10です。
1ビットで2通り、2ビットで4通り、3ビットで8通り表せるので、少ない記号でも意外なほど多くの情報を載せられるのです。
筆者も、計算問題としてより「仕組みが文字を隠す土台になる」と気づいた瞬間に、2進数を暗号と同じものだと腑に落ちました。

謎解きでは『数字→2進数』の二段構造になっている

謎解きの2進数暗号は、まず文字を数字に置き換え、その数字をさらに2進数に変える二段構造です。
A=1のようにアルファベットへ番号を振る場合もあれば、文字コードを使う場合もあり、最終的には0と1の並びとして出題されます。
解くときはその逆で、2進数を数字に戻し、そこから文字へ戻す流れになります。

この順番を先に押さえておくと、見えている並びが何を意味するのか迷いにくくなります。
たとえば5ビットならA〜Zを表す方式が取りやすく、1ブロックが8桁ならASCIIを疑う、といった切り分けができます。
イベントで●○の並びを見たとき、最初は模様だと思って流しかけたのに、記号が2種類しかないと気づいた瞬間に「あ、これは2進数だ」と切り替わることがあります。
そこから先は、何ビットなのか、どの文字体系なのかを順にほどいていけばよいのです。

0と1は●○・点灯/消灯・表裏にも化ける

2進数が謎解きでよく使われる理由は、0と1が見た目を自由に変えられるからです。
●と○、■と□、電球の点灯と消灯、コインの表と裏のように、2つの状態を持つものなら何でも対応できます。
数字に見えないから安全、とは限りません。

この「化ける」性質が、暗号としての強さにつながっています。
出題者は記号の形を変えるだけで印象を大きく変えられ、参加者は見慣れない見た目に惑わされやすいからです。
だからこそ、2種類の記号が規則的に並んでいる場面では、まず2進数を疑うのが近道になります。
慣れてくると、単なる模様ではなく「状態が2つある表現」に見えてくるはずです。

2進数暗号を見抜くサイン:これが出たら疑う

2進数暗号は、見た目の派手さより先に「気づけるかどうか」で勝負が決まります。
どれだけ変換の知識があっても、0と1しかない並びや、●○・■□のように2種類の記号だけで構成された列を見抜けなければ、解読の入口に立てません。
まずは出てきた要素が何種類あるかを数える。
そこから始めるだけで、見える景色が変わります。

記号が2種類だけなら2進数の可能性大

2進数暗号の最大のサインは、使われている記号が2種類だけだという点です。
0と1、●と○、■と□、ONとOFFのように、状態が二択に限られていれば、それはもう数字の並びに見えなくても2進数を疑う価値があります。
逆に3種類以上の記号が混じっているなら、少なくとも「2進数そのもの」ではないと切り分けやすくなります。

この見方が役立つのは、数字の列に見えても実態は記号列であることが多いからです。
初心者向けワークショップで「まず記号の種類を数えてみて」と声をかけると、参加者がすっと解き始める場面を何度も見てきました。
筆者自身も、数字の並びなのに0と1しか出てこないことに気づかず、無駄に時間を使った失敗があります。
変換力より先に観察力を立てる、そこが出発点です。

区切りの『個数』で変換ルールを見分ける

2進数らしいと気づけたら、次は「何個ずつで区切られているか」を見ます。
5個ずつのブロックならA〜Z変換のサインで、2の5乗である32通りを使って26文字を表す構成が考えられます。
8個ずつならASCII(文字コード)変換の可能性が高く、桁数そのものが手がかりになるのです。
空白で区切られていたり、色分けでまとまりが示されていたりしても、最終的には個数を数える発想が効きます。

たとえば5ビット式では、10進数に直した値がそのままアルファベット順につながるので、A=1、Z=26という対応を思い浮かべると見通しが立ちます。
8ビット式では、8桁を1組として読めばよく、01000001が65になってAを表す、という具合です。
桁数を数えるだけで、どの変換ルートを使うべきかがかなり絞れます。
まずまとまりを確認してから読む、これを習慣にすると迷いが減ります。

スイッチ・電球・コインなど2状態のモチーフ

盤面にスイッチ、電球、コイン、カードの表裏のような2状態のモチーフが並んでいたら、2進数の変装を疑ってください。
点灯と消灯、表と裏、入と切のように、どちらか一方しか取らない仕掛けは、0と1の置き換え先としてぴったりです。
見た目が道具や小物でも、構造は同じです。

ここで覚えておきたいのは、形が何であれ「2つの状態を持つものは0と1のヒントになる」という見方です。
数字の羅列でなくても、状態の切り替えが並んでいる時点で、すでに2進数の入口に立っている可能性があります。
細かなギミックの正体まで急いで当てる必要はありません。
まずは二択の並びを見つけること。
そこから先は、変換の仕事になります。

2進数を10進数に変換する:桁の重みを足すだけ

2進数から10進数への変換は、暗算で一気に片づけるより、桁ごとの重みを書き出してから足すほうが確実です。
紙の端に右から1, 2, 4, 8, 16…と振っておけば、緊張する場面でも読み違いが減ります。
やることは単純で、1が立っている桁の重みだけを拾い、0の桁は見送るだけです。
筆者もイベント中に重みを書き忘れて暗算したせいで左右を取り違えたことがあり、それ以来は必ず紙に重みを書くようにしています。

右から重みを振るのが第一歩

2進数の変換で最初にやるべきことは、各桁に役割を与えることです。
右端を1、その左を2、さらに左を4、8、16と倍々にしていけば、5ビットなら右から1, 2, 4, 8, 16、8ビットなら1, 2, 4, 8, 16, 32, 64, 128になります。
桁の位置がそのまま値を決めるので、見た目の並びに惑わされず、右端から数える習慣が変換の土台になるわけです。

この方法は、ビット数が増えても考え方が変わらないのが強みです。
5ビットでも8ビットでも、やることは同じで、右から順に重みを並べるだけです。
ワークショップで「位置ごとの数字を覚える」と説明すると少しかたくなりがちですが、「右から1, 2, 4, 8, 16と置く」と言い換えると、参加者の表情がすっとほぐれました。
仕組みを覚えるより、手順として手を動かすほうが入りやすいからでしょう。

1のところだけ重みを足し算する

重みを振れたら、次は『1』が立っている桁だけを足します。
『0』の桁は何も足さなくてよいので、計算は思ったより軽くなります。
たとえば5ビットで1の桁だけ拾うなら、右から見てどの位置が有効かを確認するだけで済みます。
これは暗算を速くするコツではなく、そもそも迷わないための手順です。

数字を一つずつ全部読むより、1の場所だけを見るほうがミスは減ります。
特に本番では、途中で頭の中の桁順が逆転しやすいものです。
だからこそ「1のところだけ足す」と短く言える形にしておくと、処理がぶれません。
足し算の対象が絞られるので、検算もしやすくなるでしょう。

計算例:●○●●を数字に直す

実際に手を動かしてみると流れはもっとはっきりします。
『1101』なら右から1, 2, 4, 8の重みを置き、1が立つのは8と4と1の桁です。
したがって8+4+0+1=13となり、10進数では13です。
別の例として『01010』を見れば、5ビットの重みは右から1, 2, 4, 8, 16なので、使うのは8と2の桁だけです。
結果は0+8+0+2+0=10で、10進数では10になります。

ℹ️ Note

全部の桁が1なら、5ビットでは11111が最大で31になります。だから計算結果がその上限を超えていないかを見るだけでも、かなりの検算になります。読む向きを取り違えると値が変わるので、右端の桁を先に確認してから進めましょう。

この確認を入れるだけで、答えの見通しが一段よくなります。
もし結果が不自然に大きければ、重みの並べ方か読み方向を見直せばよいのです。
手順を紙に書いて、1の桁だけ足して、最後に上限を見る。
この流れを体に入れてしまえば、2進数から10進数への変換はおすすめの定番手順になります。

5ビットでA〜Zを読む:謎解きで一番多いパターン

5ビットのA〜Z変換は、謎解きで最もよく出る定番です。
5桁なら2の5乗で32通りを表せるので、26文字のアルファベットを十分に収められます。
まずここで「32通りあるから余裕がある」と押さえると、数字を見た瞬間にA〜Zへつなぐ発想が取りやすくなります。
筆者も累計300回ほど参加してきて、5ビットを見たらまずA〜Zを試す、と考えるだけで初動がかなり速くなりました。

なぜ5ビットなのか(32通り≧26文字)

5ビットが使われる理由は、見た目の単純さではなく、表現できる数の都合にあります。
2進数は1桁増えるごとに通り数が倍になり、5桁なら32通りです。
アルファベット26文字を並べるにはこの32通りで足りるため、暗号側も受け手側も扱いやすいわけです。
ここを理解しておくと、ただの暗記ではなく「なぜこの形式なのか」まで見通せるようになります。

さらに、5ビットは区切りを判断する目印にもなります。
イベントで1桁ずつ読もうとして詰まった経験がありますが、最初に「5桁単位だ」と確定できれば、迷いを減らせます。
区切りを先に決めるのは、解読の半分を終えるのと同じです。

10進数→アルファベットの順番で変換

変換の核心は、10進数の値をそのままアルファベットの順番として読むことです。
A=1、B=2、C=3と数え、26番目がZになります。
2進数をいったん10進数に直したら、その数が「何番目の文字か」を示すだけなので、手順は意外なほど一直線です。
数字から文字へ飛ぶのではなく、順番に置き換える感覚で見ると理解しやすいでしょう。

両端の目印も役立ちます。
A=1=00001、Z=26=11010を覚えておけば、解読結果が範囲内かをすぐ確かめられます。
00000は0で、対応する文字はありません。
ここを見落とすとゼロ始まりで誤読しやすいので、最初に「1始まり」と固定しておくのがおすすめです。

01000=H、解読の流れを通しで体験

たとえば01000なら、重みは16、8、4、2、1です。
立っている桁だけを足すと8になり、8番目の文字はHです。
ここまでくれば、あとは同じ処理を1ブロックずつ繰り返すだけで読めます。
複数文字の暗号でも、難しそうに見えるのは並び方だけで、実際の作業は同じ手順の反復にすぎません。

筆者が参加した場でも、5桁区切りに気づかず1桁ずつ読もうとして手が止まる場面は何度も見ました。
そんなときは、まず区切りを確定してから読むのが近道です。
5ビットの暗号は、意味を知ってしまえばむしろ親切です。
まず1ブロックを読んで、次のブロックも同じように確かめてみてください。

8ビットならASCII:パソコンの文字コードで読む

8ビットの並びが出てきたら、まずASCIIの文字コードを疑うのが近道です。
5ビットのA〜Z式と違って、ASCIIは大文字・小文字・数字・記号まで扱えるため、少し込み入った暗号や番号の変換でよく使われます。
見分けるときは細かな規則を覚えるより、桁数を数えて「8桁ならASCII」と切り分けるほうがずっと確実でしょう。

8桁区切りはASCIIを疑う

1ブロックが8桁なら、最初に思い浮かべたいのはASCIIです。
8ビットは2の8乗で256通りを表せるので、英字だけでなく数字や記号まで含めて文字コード全体を載せやすく、暗号の題材としても扱いやすくなります。
5ビットのA〜Z式と混同すると解けないまま止まりやすいので、まずは「8桁かどうか」を見てください。
桁数の確認だけで、読むべき表が変わります。

65=A・97=a・48=0の番号帯を覚える

ASCIIでは大文字Aが10進数65から始まります。
A=65、B=66…Z=90が大文字帯、a=97〜z=122が小文字帯、半角数字の0は48、1は49です。
筆者は最初、A=65をそのまま丸暗記しようとして覚えにくさを感じましたが、「大文字帯は65から」と番号帯で捉えるようにしてから、aや0へも自然に広げられるようになりました。
2進数を10進数に直してからコード表で照合すれば、文字の候補を帯で追えるので迷いにくくなります。

種類ASCIIの番号帯代表例
大文字65〜90A=65
小文字97〜122a=97
数字48〜570=48、1=49

01000001を文字に直してみる

『01000001』は、重み128/64/32/16/8/4/2/1に分けて見ると、64と1だけが立つので64+1=65です。
65はASCIIで大文字Aに対応します。
8桁すべてに重みを振る作業は、5ビット式で桁を読む流れと同じで、扱う重みの種類が増えるだけだと考えると入りやすいでしょう。
筆者も8桁区切りを5ビットだと思い込んで詰まったことがありますが、桁を数え直してASCIIに切り替えた瞬間に読みが通りました。
迷ったら、ブロックの桁数を数え直してみてください。
5桁ならA〜Z、8桁ならASCIIです。

つまずきポイントと練習法:自力で解けるようになるまで

桁数を数え間違えると、同じ並びでも別の値として読んでしまいます。
2進数はまずブロックの桁数を確定し、右端を1の位として固定して読むのが基本です。
そこが崩れると、5ビットか8ビットかの見当も外れますし、ゼロ埋めの意味も取り違えやすくなります。

桁数と読む向きの確認を最初に

2進数でいちばん多い失点は、計算そのものより「何桁あるか」と「どちらから読むか」の取り違えです。
特に右端を1の位にせず左から見始めると、重みが逆転して見えてしまい、正しい答えに近づけません。
00001と1は5ビットでは同じ値でも、桁をそろえて読む前提が抜けると、問題文の意図を外してしまうのです。
表記が少し崩れて見えたら、まずブロック全体の桁数を数え、足りない分は0を補ってから読みましょう。

●○どちらを1にするかは仮置きで両方試す

●○や表裏の問題は、最初から「どちらが1か」を決め打ちしないほうが解きやすいです。
●を1、○を0として通らなければ、逆にして試せばよいだけで、解けた方がその場の正解になります。
目立つ方や点灯している方が1であることは多いですが、そこで思考を止めないことが肝心です。
仮置きで両方を試す姿勢は、暗号系の問題で行き詰まりを減らすおすすめの考え方です。

1日5問の自作ドリルで暗算化

身近な数字で反復すると、2進数は一気に身体に入ってきます。
1〜26の数字を毎日5個ずつ2進数に直す自作ドリルを続けると、約1週間で重みの暗算に手が慣れてくるでしょう。
筆者がワークショップで配るこのドリルでも、数週間続けた受講者が会場最速級まで伸びたことがありました。
チーム参加なら「2進数担当」を決めてしまうのも有効です。
自分の得意分野を引き受けると解読速度が上がり、全体の流れも安定します。
練習してみてください。
仕組みが見えると、だいぶ楽になります。

シェア

真鍋 奏人

謎解きイベント参加歴8年、累計300回以上の参加経験を持つ謎解きマニア。謎検1級取得。攻略テクニックの体系化をライフワークとしています。

関連記事

テクニック

ヴィジュネル暗号は、鍵の文字数ぶんだけ異なるずれを使い分ける多表式暗号であり、シーザー暗号がずれ1種類なのに対して最大26種類のずれを順番に適用します。つまり、同じ平文の文字でも位置によって別の暗号文字に変わる仕組みで、見た目は難しくても「シーザー暗号の合わせ技」と考えるとぐっと掴みやすくなるはずです。

テクニック

数字暗号は、数字を文字へ当てはめる換字式と、表の座標や何文字目かを指す位置参照式に大別できる暗号です。謎解きイベントで数字列に10分ほど詰まったときも、桁数と最大値を声に出して確かめた瞬間に型が割れ、解き筋が一気に見えました。

テクニック

顔文字暗号は、謎解きで使われる換字式暗号の応用であり、文字や数字の暗号は解けるのにここだけ手が止まる人へ向けて、ひらめき任せをやめて再現できる手順に落とし込むための記事です。

テクニック

16進数は、0〜9とA〜Fの16個の記号で数を表す記数法で、謎解きでは41 42 43のような羅列として出てきます。見た目は難しそうでも、まず2桁ごとに区切って単位をつかめば、紙とペンだけで十分に読み解けるのがこの暗号の面白さです。