【実録】パスワードを忘れて始末書を書くリスナーを、1枚のPWAで救済した話
最終更新:2026/04/24
私のゲーム配信に遊びに来てくれるリスナーさんから、ある日こんな悲痛な叫びが届きました。
「会社で3ヶ月に一度パスワード変更を強制されるんですが、10個もあって覚えきれず、忘れるたびに始末書を書かされています……」
連絡先も知らない彼を、今この場で救うにはどうすればいいか。
その答えが、インストール不要で即座に届けられるPWA(Progressive Web Apps)と、
数学的にパスワードを復元する「決定論的アルゴリズム」でした。
1. 従来の管理ツールの限界と「OJ-Pass」の思想
1Passwordなどの便利なツールは世の中に溢れています。
しかし、それらはすべて「保存」を前提としています。
保存するからこそ、漏洩のリスクやデバイス間の同期という課題がつきまといます。
OJ-Passは発想を180度転換しました。
「保存」を捨てて「再構築(ReBuild)」する。
2. 3つの「不変の変数」でパスワードを復元する
OJ-Passが採用している「Permanent Algorithm」は、以下の3つの要素をシードとして掛け合わせます。
- マスターキー(秘密): 自分だけが知っている唯一の合言葉
- 作成月(記録): 会社が決めた更新月(例:202604)
- 使用場所(事実): Googleや社内PCなどの固定されたサービス名
この3つが揃えば、100年後でも同じパスワードが再現されます。
サーバー通信もデータベースも不要。
これが「保存しないセキュリティ」という選択です。
👉 通知に振り回されない。Petalが目指す『静かなホーム画面』とPWAの通知制御 の解説が役に立ちます。
3. 技術解説:SHA-256と決定論的ロジック
心臓部にはブラウザ標準の Web Crypto API を採用し、
すべてクライアントサイドで完結するハッシュ生成を行っています。
SHA-256によるハッシュ生成
// 文字列を結合してハッシュ化
const seed = `${masterKey}|${service}|${month}`;
const hash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(seed));
記号の強制補正ロジック
「記号必須」のルールにも対応するため、
ハッシュ値から決定論的に記号を挿入します。
// ハッシュの最後2文字から記号を決定
const lastByteHex = hex.slice(-2);
const forcedSym = symbols[parseInt(lastByteHex, 16) % symbols.length];
password = forcedSym + password.slice(1);
これにより、再現性を壊さずにルールを満たすことができます。
4. 結論:技術は「誰か」を救うためにある
PWAは単なる「Webのアプリ化」ではありません。
URLを貼るだけで、目の前の人の問題をその場で解決できる。
それがPWAの本当の価値です。
1枚のURLが、誰かを始末書から解放する。
OJappの哲学である
「ユーザーの時間と精神を管理社会から取り戻す」
という想いを、このツールに込めました。
実際のツールはこちら:
OJ-Pass v1.1 — 保存しない安全パスワード生成ツール
👉 https://tips.ojapp.app/ios_pwa_manifest/