LangReply のセキュリティ
何を暗号化し、何を破棄し、そして何を正直に保証できないのか。マーケティング用語は使いません。
1. 保存時の暗号化
機微なデータ(ユーザーアカウント、翻訳履歴、OTTメッセージ、設定)は保存時に AES-256-GCM で暗号化されます。マスターキーは Git リポジトリの外、アクセスを制限したボリューム上(パーミッション 600、専用の所有者)に置いています。
機微なレコードはそれぞれ固有の IV(96ビットのランダムな nonce)と GCM 認証タグを持ちます。暗号文が改ざんされた場合は復号時に検知されます(暗号学的な失敗として扱われ、静かに壊れることはありません)。
文書化された例外:languages.json(対応言語の公開リスト)は暗号化の対象から明示的に除外しています。公開カタログであり、個人データではないためです。
2. 不可逆な消去(クリプトシュレッディング)
仕組み
OTTの各会話、機微なメッセージの各バッチ、そして各ユーザーアカウントは、それぞれ専用の DEK(データ暗号鍵)を持ちます。これはランダムに生成された一意の AES-256 鍵です。データはこの DEK で暗号化され、DEK 自体はマスターキー(KEK)で暗号化されます。
データを不可逆に消去するために、当社は DEK を破棄します。暗号化されたバイト列はデータベースやディスク上に残る可能性がありますが、鍵がなければランダムなノイズと区別できません。
数学的な裏付け
AES-256 の DEK は 2256 通り、およそ 1.16 × 1077 の鍵空間を持ちます。公開された暗号学の知見と利用可能な計算資源(Grover のアルゴリズムによる耐量子想定で 2128 に落ちる場合も含む)を前提とすれば、破棄された鍵を総当たりで復元することは実行不可能です。
実際に破棄されるもの
- メモリ上の DEK(即時ゼロ化)。
- データベース上の暗号化された DEK(
UPDATE ... SET encrypted_dek = NULL、必要に応じて Postgres のVACUUM)。 - アプリケーションキャッシュ上の複製。
3. 自動的に消えるメッセージ
OTTの各会話で自動消去タイマーを有効にできます。設定した時間を過ぎると、その会話の DEK をクリプトシュレッディングすることでメッセージが破棄されます。
設定できる期間
- 1時間
- 24時間
- 7日
- 30日
- オフ
何も設定しない場合、既定の保持期間は適用されません。手動で削除するまでメッセージは保持されます。
カウントは、メッセージが受信者に読まれた時点(既定)または送信された時点(オプション)から始まります。サーバー側のスイーパーが10分ごとに実行され、期限切れのものを消去します。
期間の変更は会話内に表示されます(タイムスタンプ付きのシステムメッセージ)。送信者も受信者も、期限切れのメッセージを「延長」することはできません。鍵はすでに破棄されています。
4. アカウントの完全消去
ユーザーポータルの「すべてのメッセージを破棄」ボタンを押すと、アカウントに紐づくすべての DEK が直ちに破棄されます。対象は OTT の会話、翻訳履歴、下書き、暗号化された添付ファイルです。
この操作は:
- 暗号学的には即時です(鍵はミリ秒単位で消えます)。
- 取り消せません。破棄した DEK のバックアップは一切保持しません。
- 二重の同意で確認します(パスワードの入力+確認フレーズ)。
- 記録されます(監査メタデータ:タイムスタンプ、IP、ユーザーエージェント)。破棄した内容が露出することはありません。
メッセージの消去はアカウント自体(ID、メールアドレス、請求設定)を削除するものではありません。それには、別途用意しているアカウントの完全削除をご利用ください。
5. アカウント単位の分離
各アカウントは固有の DEK を持ちます。ある DEK が侵害されても、露出するのはそのアカウントのデータだけで、他のアカウントには及びません。マスターキー(KEK)は DEK を復号するために必要ですが、それだけでは、DEK がデータベース上に存在しないアカウントを読むことはできません。
API リクエストは account_id でスコープされます。セッションの帰属を検証せずにアカウント ID を自由なパラメータとして受け取るルートは存在しません。
6. 自社ホスティングの翻訳エンジン
主たる翻訳は、自社サーバー上の NLLB-200 1.3B(202言語)が担い、インターネットに公開していない内部マイクロサービスで動作します。翻訳のために内容が当社インフラの外に出ることはありません。
フォールバック:主エンジンが利用できない場合、自動フォールバックは Claude(Anthropic)のみを呼び出します。機微な用途ではアカウント単位で無効化できます。作動した場合、内容は Anthropic に送信され、その旨を API レスポンスで明示します。
MyMemory へのフォールバックは 2026年7月28日に廃止しました。内容を URL に平文で送信しており、データ処理契約もなかったためです。第三の逃げ道はありません。いずれのエンジンも利用できない場合、翻訳は失敗します。契約のない第三者に委ねることはしません。
7. 認証
パスワードは scrypt(N=16384, r=8, p=1)でハッシュ化します。セッションは HMAC 署名付きの HttpOnly クッキーで管理します。二要素認証に対応:TOTP(Google Authenticator、Aegis、1Password)および SMS のワンタイムコード(Twilio、受信者の言語にローカライズ)。
認証エンドポイントにはレート制限があります(試行が続くと 429 を返します)。パスワードをメールで送ることはありません。再設定はワンタイムのリンクで行います。
8. バックアップ
データボリュームの暗号化バックアップを毎日取得します。保持期間:ローリング14日、その後削除します。
オフサイトの暗号化コピー(AES-256)を GitHub と Backblaze(米国)に保管しています。OTT/SMS メッセージとその鍵はここから除外されており、欧州連合の外に出ることはありません。
9. お客様の権利(GDPR/第25号法/CCPA)
アクセス、訂正、消去、ポータビリティ、異議申立ての権利があります。ご請求は privacy@langreply.com までメールでお送りください。30日以内に対応します。消去には、上記のクリプトシュレッディングを用います。
10. 認証取得状況 — 正直に
当社は現時点で SOC 2、ISO 27001、HIPAA のいずれの認証も取得していません。事実になるまで、そうでないと主張することはありません。ここに記載した対策は実際に運用されていますが、対応する外部監査はまだ受けていません。
11. 正直に保証できないこと
幻想を売るより、事実をお伝えします。クリプトシュレッディングにできないことは次のとおりです。
- バックアップ:当社のバックアップはメッセージと鍵のテーブルを除外しています。リストアによって破棄済みのメッセージが再び露出することはありません。その代償は率直にお伝えします。データベースを失った場合、OTT/SMS の履歴は復元できません。
- 受信者側のスクリーンショット:消えるメッセージを送っても、相手は別の端末で画面を撮影できます。これを防げるソフトウェアは世界中どこにもありません。Signal でも同じです。
- WAL、ログ、レプリカ:Postgres はトランザクションログ(WAL)を書き込みます。暗号文のバイト列が消去前にそこへ残っていた可能性があります。これらのログはローテーションされますが、即時ではありません。
- SSD とウェアレベリング:SSD は書き込みを物理的に分散させます。論理的な
DELETEが物理セクタを必ず上書きするとは限りません。だからこそクリプトシュレッディングは物理消去より確実なのですが、暗号文のバイト列は物理的にしばらく残り得ます。鍵がなければ、それは読めないままです。 - 監査メタデータ:監査と不正対策のため、最小限のメタデータ(消去のタイムスタンプ、IP)を保持します。破棄された内容は含まれません。
- エンドツーエンド暗号化:OTT メッセージはサーバー側で保存時に暗号化されていますが、Signal のような意味での E2EE ではありません(サーバーですら読めない、という状態ではありません)。DEK が存在する限り、LangReply は技術的にはメッセージを復号できます。実際にはしていませんが、していないとは主張できても、できないとは主張できません。
12. セキュリティ上の問題を報告する
協調的な開示は security@langreply.com 宛に、件名へ [SECURITY] を付けてご連絡ください。72時間以内に受領をお知らせし、深刻度に応じて妥当な期間内に修正または緩和策を提供します。現時点で正式なバグバウンティはありません。ご希望があれば報告者のお名前を掲載します。
最終更新:2026年8月6日