【技術解説】Mindmap personal / Kiroku のJSON暗号化にAES-GCMを採用した理由

その他

Mindmap personal と Kiroku では、
エクスポートファイル(JSON)の暗号化に AES-GCM を採用しています。

この記事では、

  • なぜJSONを暗号化する必要があるのか
  • AES-GCMとは何か
  • なぜこの暗号方式を選んだのか
  • 改ざん検知がどのように実現されているのか

を、実装思想ベースで解説します。


なぜJSONエクスポートを暗号化するのか(技術的背景)

JSONは非常に扱いやすいデータ形式です。

  • 人が読める
  • JavaScriptと相性が良い
  • デバッグしやすい

その一方で、そのままでは情報が丸見えという欠点があります。

Mindmap personal / Kiroku のJSONには、

  • 思考の流れ
  • 個人的なメモ
  • タスクや計画

といった、第三者に見せる前提ではない情報が含まれます。

そのため、

  • ファイル単体で安全に管理できる
  • クラウドやUSBで移動しても内容が漏れにくい

状態を作る必要があり、暗号化を前提としました。


ブラウザアプリにおける暗号化の前提条件

今回の暗号化は、以下の制約条件の中で設計しています。

  • ブラウザのみで完結する
  • サーバーに秘密情報を送らない
  • 外部ライブラリに依存しない
  • 実用的な安全性を確保する

そのため、採用したのが Web Crypto API を利用した暗号化です。


AES-GCMとは何か

AES(Advanced Encryption Standard)

AESは、世界中で利用されている共通鍵暗号方式です。

  • 高速
  • 安全性が高い
  • 多くの環境で標準対応

現在も「破られた実例がない」ことから、
実用暗号のデファクトスタンダードになっています。


GCM(Galois/Counter Mode)

GCMは、AESをどのように使うかを定義した「モード」の一種です。

最大の特徴は、

  • 暗号化
  • 改ざん検知(認証)

同時に行える点です。

これにより、

  • 内容を読めない
  • 書き換えられていたら復号できない

という状態を実現できます。


なぜAES-GCMを採用したのか

AES-GCMを採用した理由は、次の4点です。

1. 暗号化と改ざん検知を一体で扱える

従来は、

  • 暗号化
  • ハッシュによる検証

を別々に行う必要がありました。

AES-GCMでは、これを1ステップで実現できます。


2. Web Crypto APIで安全に利用できる

ブラウザ標準のWeb Crypto APIは、

  • 鍵管理が比較的安全
  • 実装ミスを減らせる

という利点があります。

独自実装による事故を避ける意味でも、
標準APIを使う方針を取りました。


3. パフォーマンスが良い

マインドマップやメモのJSONは、
数KB〜数百KB程度になることがあります。

AES-GCMは高速なため、

  • エクスポート
  • インポート

どちらでも待ち時間がほぼ発生しません。


4. 実用レベルで十分な安全性

軍事レベルのセキュリティを目指すのではなく、

  • 個人利用
  • 思考・メモ管理

という用途において、現実的に十分な安全性を確保することを重視しました。


改ざん検知はどのように行われているか

AES-GCMでは、暗号化時に「認証タグ」が生成されます。

復号時には、

  • 暗号文
  • 初期化ベクトル(IV)
  • 認証タグ

がすべて一致していなければ、復号に失敗します。

つまり、

  • 1文字でも書き換えられる
  • ファイルの一部が壊れる

と、正しいパスワードでも復号できません

この仕様により、

  • 壊れたデータを誤って使う
  • 改ざんに気づかない

といったリスクを防いでいます。


パスワードについての考え方

パスワードは、

  • 暗号鍵を生成するための材料
  • サーバーに送信されない
  • ローカルでのみ使用される

という扱いです。

ツール側では、

  • パスワードを保存しない
  • 復号できなければ元に戻せない

設計になっています。

これは利便性よりも、利用者自身の管理を尊重する方針によるものです。


まとめ:技術的にも「安心して使える」設計を目指して

Mindmap personal / Kiroku の暗号化は、

  • JSONという扱いやすい形式
  • ブラウザ完結という制約
  • 実用的な安全性

これらのバランスを重視して設計しています。

AES-GCMの採用により、

  • 内容を隠す
  • 改ざんを検知する

という2つの要件を、シンプルな実装で実現しました。

今後も、

  • 使いやすさ
  • 安全性
  • 無駄に複雑にしない

この方針を大切に、改善を続けていく予定です。

暗号化でセキュリティ向上したアプリはこちら

コメント

タイトルとURLをコピーしました