【図解】バイナリとは何か?16進数・ビット・バイトの基礎からセキュリティへの応用まで|サイバーセキュリティ.com

【図解】バイナリとは何か?16進数・ビット・バイトの基礎からセキュリティへの応用まで



「バイナリって言葉はよく聞くけど、実際に何のことかよくわからない」——そんな悩みを持つセキュリティ担当者は少なくありません。ログの分析、マルウェアの調査、パケットキャプチャの確認……セキュリティ業務のあらゆる場面で登場するバイナリ。この記事では、プログラミング経験ゼロでも理解できるよう、図や表を使いながらバイナリの基礎から実務での活用方法までをやさしく解説します。

バイナリとは?

バイナリの定義とは

バイナリ(binary)は英語で「2つの状態からなる」という意味です。コンピューターの世界では、すべてのデータを 「0」と「1」の2種類だけで表現する方法——つまり2進数(にしんすう)のことを指します。

私たちが普段使う数字は「10進数」で、0〜9の10種類を使います。9の次は桁が上がって10になりますね。一方、バイナリ(2進数)は0と1の2種類しかないため、1の次はすぐに桁が上がって「10(イチゼロ)」になります。

身近な例え:電気スイッチ。スイッチは「ON(点灯)」か「OFF(消灯)」の2状態しかありません。コンピューターの回路も同じで、電気が流れている状態を「1」、流れていない状態を「0」として情報を表現します。1億個のスイッチを並べることで、あらゆるデータを記録できるのです。

10進数とバイナリ(2進数)の対応表

まず、10進数とバイナリがどう対応するかを確認しましょう。以下の表を手元に置いておくと、バイナリを読む際の基準になります。

10進数 2進数(バイナリ) 覚え方のコツ 日常の例え
0 0000 ゼロはゼロ 電球:消灯
1 0001 最後の桁が1 電球:点灯
2 0010 2桁目が1 スイッチ2つ
4 0100 3桁目が1 4部屋のアパート
8 1000 4桁目が1 8つのロッカー
10 1010 8+2 電話の内線番号
15 1111 全桁1(4ビット最大) 満室のホテル
16 10000 5桁目が1 新しいフロア
255 11111111 全桁1(8ビット最大) IPアドレスの最大値

バイナリを10進数に変換する方法

バイナリ「1011」を10進数に変換してみましょう。右の桁から「1の位・2の位・4の位・8の位」と割り当てて計算します。

バイナリ1011を10進数11に変換する計算の図解

ビットとバイトを正しく知ろう

ビット(bit)とは

バイナリの「0」や「1」の1桁分を「1ビット(1 bit)」と呼びます。ビットはデータの最小単位です。ビットが増えるほど表現できる状態の数が増えます。

  • 1ビット:2通り(0か1)
  • 2ビット:4通り(00 / 01 / 10 / 11)
  • 8ビット:256通り(0〜255)
  • 32ビット:約42億通り(IPv4アドレスの総数)

バイト(Byte)とデータ単位の全体像

8ビットをまとめたものが「1バイト(1 Byte)」です。英字1文字はちょうど1バイトで表現されます(ASCII文字の場合)。

単位 正式名称 ビット数 身近な例
1 bit ビット 1ビット コインの表/裏(0か1)
1 Byte バイト 8ビット 英字1文字(例:’A’)
1 KB キロバイト 約8,000ビット 短いメモ帳のテキスト
1 MB メガバイト 約800万ビット スマホ写真1枚
1 GB ギガバイト 約80億ビット 映画1本(標準画質)
1 TB テラバイト 約8兆ビット HDD・SSDの容量単位
セキュリティで重要なビット数。AES-128(128ビット鍵)AES-256(256ビット鍵)SHA-256(256ビットのハッシュ値)RSA-2048(2048ビットの公開鍵)。ビット数が大きいほど解読が困難になります。「256ビット暗号」と聞いたら、2の256乗通りの鍵候補があるということです。

16進数はセキュリティ現場の共通語

なぜ16進数が使われるのか

バイナリはコンピューターには扱いやすいですが、人間が読むには桁が多すぎます。1バイトだけでも「11111111」と8桁になります。そこで登場するのが16進数(ヘキサデシマル)です。

16進数は4ビットを1桁で表現できます。つまり1バイト(8ビット)をわずか2桁で書けます。10以上の値はA〜Fのアルファベットで表し(A=10, B=11 … F=15)、先頭に「0x」をつけることで16進数だと示します。

バイナリ・10進数・16進数の相互変換を示す図

16進数 2進数(4bit) 10進数 よく出る場面 具体例
0〜9 0000〜1001 0〜9 通常の数値 通常の数字と同じ
A 1010 10 MACアドレス FF:FF:FF:FF:FF:FF
C 1100 12 IPサブネット /24 = 0xFFFFFF00
F 1111 15 色コード・ハッシュ #FF0000(赤)
0xFF 11111111 255 1バイト最大値 ブロードキャストIP

セキュリティ担当者が覚えておくべき16進数

  • 0x00:NULLバイト。文字列終端・バイナリインジェクション攻撃の起点
  • 0x0A:改行コードLF(Unix系)。HTTPヘッダインジェクションに悪用
  • 0x0D 0x0A:改行コードCRLF(Windows系)。HTTPヘッダの境界
  • 0x4D5A(MZ):Windowsの実行ファイル(.exe/.dll)のマジックナンバー
  • 0x7F454C46(ELF):Linux/Unixの実行ファイルのマジックナンバー
  • 0xFFD8FF:JPEGファイルのマジックナンバー

バイナリとASCIIの仕組みとは

ASCIIコードとは

コンピューターは文字をそのまま保存できないため、各文字に番号を割り当てています。最も基本的なものが「ASCII(アスキー)コード」です。英字・数字・記号などを0〜127の数値で表現し、それぞれがバイナリで記録されます。

セキュリティ担当者がASCIIコードを知っておくべき理由は、攻撃者がASCIIコードを悪用してセキュリティフィルターを回避するケースがあるからです。

セキュリティで重要なASCIIコード一覧表

文字 10進数 16進数 2進数 セキュリティ上の意味 注意点
A 65 41 01000001 ログ・パケット内の文字 大文字・小文字は別コード
a 97 61 01100001 攻撃文字列の一部 0x41と0x61の違いに注意
0 48 30 00110000 SQLインジェクション 数字と文字コードの混同に注意
/ 47 2F 00101111 パス区切り文字 URLエンコードで%2Fに変換
< 60 3C 00111100 XSSの特殊文字 HTMLエスケープ対象
NUL 0 00 00000000 文字列の終端(C言語) バイナリインジェクションの起点
CR 13 0D 00001101 行末コード(Windows) ヘッダインジェクションに悪用
LF 10 0A 00001010 行末コード(Unix) 改行コード統一の重要性
文字コードの脆弱性に注意。文字コードの不一致を悪用した攻撃が存在します。たとえばShift-JISのマルチバイト文字処理ミスによるSQLインジェクションUTF-8のオーバーロングエンコード(本来より多くのバイトで文字を表現する不正な方法)などが代表例です。

セキュリティ業務でのバイナリの活用場面

バイナリの知識は「知っているだけ」では終わりません。以下の表は、セキュリティ担当者がバイナリに直接触れる主な場面です。

セキュリティ業務 バイナリの使われ方 担当者が見るべきポイント
マルウェア解析 実行ファイル(.exe等)の内部構造を16進数で読む MZヘッダ(4D 5A)でWindowsの実行ファイルか確認
ログ分析 パケットのペイロードがバイナリで記録される 異常なバイト列(シェルコードのパターン等)の検出
暗号・ハッシュ SHA-256等の出力は256ビット(32バイト)のバイナリ ファイルの改ざん検知(ハッシュ値の比較)
脆弱性診断 バッファオーバーフロー等でバイナリデータを注入 入力値の長さ・文字種制限の確認
フォレンジック 削除ファイルをバイナリレベルで復元 マジックナンバー(先頭バイト)でファイル種類を特定
ネットワーク監視 パケットキャプチャのデータがバイナリ形式 Wiresharkでの16進数表示の読み方

マジックナンバーでファイル種類を見分ける

ファイルの先頭数バイトには「マジックナンバー」と呼ばれる固有のバイト列が格納されており、ファイルの種類を識別できます。拡張子が変更されていてもマジックナンバーを確認すれば正体がわかるため、不審ファイルの調査で非常に役立ちます。

マジックナンバー(16進数) ファイル種類 拡張子の例 セキュリティ上の注意
4D 5A(MZ) Windowsの実行ファイル .exe / .dll マルウェアの多くがこの形式
7F 45 4C 46(ELF) Linux/Unixの実行ファイル 拡張子なし Linuxサーバー侵害に使われる
FF D8 FF JPEG画像 .jpg / .jpeg 画像を偽装したマルウェアに注意
89 50 4E 47(PNG) PNG画像 .png 同上
25 50 44 46(%PDF) PDFファイル .pdf 悪意あるPDFの添付に注意
50 4B 03 04(PK) ZIPファイル .zip / .docx / .xlsx Officeファイルも内部はZIP形式

ハッシュ値はバイナリデータ

ファイルの改ざん検知によく使われる「ハッシュ値」(SHA-256など)も、実体はバイナリデータです。SHA-256の出力は256ビット(32バイト)で、通常は64文字の16進数文字列として表示されます。

実務で使えるツール・コマンド集

Windowsで使えるコマンド

  • certutil -hashfile ファイル名 SHA256:ファイルのSHA-256ハッシュ値を確認
  • Format-Hex ファイル名(PowerShell):ファイルを16進数で表示
  • Get-FileHash ファイル名 -Algorithm SHA256:PowerShellでハッシュ確認

Linux / macOSで使えるコマンド

  • xxd ファイル名:ファイルの16進数ダンプを表示(最もよく使う)
  • hexdump -C ファイル名:16進数ダンプ(詳細表示)
  • file ファイル名:マジックナンバーでファイル種類を判定
  • sha256sum ファイル名:SHA-256ハッシュ値を確認
  • strings ファイル名:バイナリから読める文字列を抽出

GUIツール 初心者におすすめ

  • Wireshark:ネットワークパケットを16進数で確認。無料で高機能。セキュリティ担当の必須ツール
  • CyberChef:ブラウザで動く多機能変換ツール。16進数・Base64・ハッシュなど様々な変換に対応。インストール不要
  • HxD(Windows):フリーの16進数エディタ。バイナリファイルの確認・編集が可能
  • Ghidra(NSA製):無料のリバースエンジニアリングツール。マルウェア解析に活用

よくある疑問(Q&A)

Q. バイナリとバイナリファイルは何が違うの?

「バイナリ(数の表現方法)」と「バイナリファイル(テキストではないファイル全般)」は文脈によって使い分けられます。日常会話で「バイナリファイル」と言う場合は「実行ファイル・画像・音声など、テキスト以外のファイル」を指すことが多いです。

Q. Base64とバイナリはどう違うの?

Base64はバイナリデータをテキストとして安全に送受信するためのエンコード方式です。A〜Z、a〜z、0〜9、+、/ の64文字でバイナリを表現します。JWTトークンやメール添付ファイルで使われます。マルウェアがコードをBase64でエンコードして検知を回避しようとするケースもあるため、Base64文字列が含まれるログには注意が必要です。

Q. エンディアン(リトルエンディアン・ビッグエンディアン)とは?

複数バイトのデータをメモリに格納する際の「バイトの並び順」のことです。ビッグエンディアンは人間の感覚に近い「大きい桁から」の並び順、リトルエンディアンは「小さい桁から」の並び順で、IntelのCPUはリトルエンディアンを使います。バイナリ解析で「思った値と違う」と感じたときはエンディアンの違いが原因であることが多いです。

Q. バイナリ解析ってどこから勉強すればいい?

最初のステップとしては、CyberChefを使って16進数とBase64の変換を試してみることをおすすめします。次に、Wiresharkでパケットを実際に見てみましょう。基礎が固まったら、CTF(Capture The Flag)のバイナリ問題に挑戦するのが実践的なスキルアップになります。

まとめ

バイナリとは0と1だけで情報を表現する2進数のことです。1バイト=8ビットで256通りの値を表現でき、16進数を使うと人間にも読みやすくなります。文字コード(ASCII)やハッシュ値もバイナリデータの一種で、攻撃者による悪用やファイル改ざん検知にも深く関わります。WiresharkやCyberChefなどのツールと組…バイナリとは0と1だけで情報を表現する2進数のことです。1バイト=8ビットで256通りの値を表現でき、16進数を使うと人間にも読みやすくなります。文字コード(ASCII)やハッシュ値もバイナリデータの一種で、攻撃者による悪用やファイル改ざん検知にも深く関わります。WiresharkやCyberChefなどのツールと組み合わせることで、セキュリティ業務で即実践できる知識です。

SNSでもご購読できます。