【実録】パスワードを忘れて始末書を書く人を、1枚のPWAで救った話

パスワードを忘れるたびに始末書を書く──そんな状況を、たった1枚のPWAで救った実話。保存しないパスワード生成という新しい発想と、その裏にある技術と思想を解説します。

目次
私のゲーム配信に遊びに来てくれるリスナーさんから、ある日こんな悲痛な叫びが届きました。

「会社で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年後でも同じパスワードが再現されます。

サーバー通信もデータベースも不要。 これが「保存しないセキュリティ」という選択です。

3. 技術解説:SHA-256と決定論的ロジック

心臓部にはブラウザ標準の Web Crypto API を採用し、 すべてクライアントサイドで完結するハッシュ生成を行っています。

SHA-256によるハッシュ生成

JavaScript
// 文字列を結合してハッシュ化
const seed = `${masterKey}|${service}|${month}`;
const hash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(seed));

記号の強制補正ロジック

「記号必須」のルールにも対応するため、 ハッシュ値から決定論的に記号を挿入します。

JavaScript
// ハッシュの最後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 — 保存しない安全パスワード生成ツール

iOSでホーム画面に追加したURLが勝手に変わる?原因と対策(PWA・manifestの罠)

iPhoneでWebページをホーム画面に追加したとき、今見ていたページではなく、別のURLが保存されてしまうことがあります。 PetalまわりのPWA設定を見直していて、かなり分かりやすい罠にハマりました。 iPhoneであるページを開いて「ホーム画面に追加」したのに、追加したアイコンから開くと、さっき見ていたURLとは違うページに飛んでしまう。 最初はSa

おじゃち

OJapp代表 WPプラグインPWAマーケティング・OnePage.OneApp.(1P1A)・ホーム画面名刺&SNSのPetal・その他OJappToolsなどを開発。PWA・ホーム画面・Safari挙動・軽量Web体験を中心に、実験しながらWebアプリを開発しています。

← 記事一覧へ戻る