Rosarium

実践事例 / 公開物 / case

第1章 暗号方式の変更で見直すべき異常系を特定する

CRA対応をきっかけに、長年使ってきた暗号方式をCNG・DPAPIへ変更することになった。既存の方式はMD5を内部で用いていたが、変更の対象はAPIの呼び替えだけではない。新しいAPIでは失敗を返すため、保存・読出し・復号の各段階

公開:最終更新:

更新履歴

  1. 公開

ソフトウェア設計 / 生成ai / オーケストレーション / hitl / 保守開発

読む目的: AI導入・責任・評価 / AI × ソフトウェア開発 / 事例・実務

このBookの目次(全7章)
  1. 全体構成
  2. 第1章 暗号方式の変更で見直すべき異常系を特定する
  3. 第2章 異常系の構造を整理し、設計方針を確定する
  4. 第3章 コード探索と人間の確認で、変更箇所と実現方法を絞る
  5. 第4章 分散した検討結果を、レビュー可能な仕様書へ集約する
  6. 第5章 確認した現行仕様をAI間で渡し、仕様書へ反映する
  7. 第6章 全体像を共有しながら、コード生成と単体テストを進める
  8. 第7章 内製化の成果と、保守業務へAIを広げられた条件を振り返る
目次
  1. 暗号方式の変更は、エラー処理の見直しでもあった
  2. エラーの発生箇所と、値が使われる先を合わせて調べる
  3. 呼出しのタイミングを調べ、変更範囲を決める

現在位置:第1章・全7章

暗号方式の変更は、エラー処理の見直しでもあった

CRA対応をきっかけに、長年使ってきた暗号方式をCNG・DPAPIへ変更することになった。既存の方式はMD5を内部で用いていたが、変更の対象はAPIの呼び替えだけではない。

新しいAPIでは失敗を返すため、保存・読出し・復号の各段階で、失敗後の処理を決める必要があった。

パスワードは、保存時には平文から暗号化してレジストリへ保存し、利用時には読み出して復号し、外部処理へ渡す。どの時点で値が不正になったかによって、後続の処理へ与える影響が異なる。

保存と利用では、値の状態が変わる

+の付いた項目を選ぶと、詳しい説明が下に表示されます。

保存と利用では、値の状態が変わる暗号化して保存し、利用時に読み出して復号します。平文パスワード既存システム・工程暗号化既存システム・工程保存知識・根拠読出し知識・根拠復号既存システム・工程外部処理で利用既存システム・工程保存と利用では、値の状態が変わる暗号化して保存し、利用時に読み出して復号します。平文パスワード既存システム・工程暗号化既存システム・工程保存知識・根拠読出し知識・根拠復号既存システム・工程外部処理で利用既存システム・工程

詳しい説明

気になる項目を選ぶと、その役割や判断理由を確認できます。

平文パスワード

設定したパスワードは、保存前には平文の状態です。暗号方式の変更ではAPIだけでなく、この値が保存・利用されるまでの流れを調べ、失敗後の影響を確認しました。

暗号化

平文を暗号化してから保存します。新しい暗号化APIは失敗を返すため、戻り値を確認し、不正な状態で後続へ進ませない処理を検討しました。

保存

暗号化した値をレジストリへ保存します。暗号化の成功と保存の成功を分けて考え、保存失敗や後の値の欠落・破損も調査対象にしました。

読出し

利用時は、保存した暗号化済みの値を読み出します。起動時だけでなく特定機能や外部連携の前にも呼ばれるため、読出し位置と値の利用先をコードで確認しました。

復号

読み出した暗号化済みの値を復号します。失敗した値を平文パスワードとして使わないよう、APIの戻り値と後続処理の停止位置を検討しました。

外部処理で利用

復号した値を必要とする外部処理へ渡します。不正な値を使えば誤った処理や課金につながるリスクがあるため、安全に利用できない場合は停止する方針にしました。これは事故の発生実績を示すものではありません。

エラーの発生箇所と、値が使われる先を合わせて調べる

暗号化APIの失敗、レジストリへの保存失敗、値の欠落・破損・読出し失敗、復号APIの失敗を区別した。特に復号に失敗した値を外部連携で利用すれば、誤った処理や課金へつながるリスクがある。

これは発生した事故の記録ではなく、変更前に検討した影響である。

失敗した値を、外部処理へ流さない

+の付いた項目を選ぶと、詳しい説明が下に表示されます。

失敗した値を、外部処理へ流さない各段階のエラーと後続への影響を確認します。平文パスワード既存システム・工程暗号化既存システム・工程保存知識・根拠読出し知識・根拠復号既存システム・工程外部処理で利用既存システム・工程失敗した値を、外部処理へ流さない各段階のエラーと後続への影響を確認します。平文パスワード既存システム・工程暗号化既存システム・工程保存知識・根拠読出し知識・根拠復号既存システム・工程外部処理で利用既存システム・工程

詳しい説明

気になる項目を選ぶと、その役割や判断理由を確認できます。

平文パスワード

保存するパスワードを起点に、暗号化・保存・読出し・復号・利用を追いました。どの時点で値が不正になったかによって後続の影響が異なるため、失敗を一括で扱いませんでした。

暗号化

暗号化APIが失敗を返す条件を確認しました。正常な保存処理を大きく変えるのではなく、失敗した結果を保存や後続処理へ渡さないことを検討しました。

保存

暗号化済みの値を保存できない場合を確認しました。暗号化処理そのものの失敗と区別し、どこで異常を検出するかを整理しました。

読出し

保存値の欠落・破損・読出し失敗を区別しました。保存場所だけで対応を決めず、読み出した値がその後どこで使われるかまで調べました。

復号

復号APIの失敗と、その後の値の扱いを確認しました。正常性を確かめられない場合は、外部処理へ進ませない停止位置を検討しました。

外部処理で利用

不正な値が外部連携で使われると、誤った処理や課金へつながるリスクがあります。実際に発生した事故の記録ではなく、変更前に後続への影響を検討したものです。

同じレジストリでも、UIの表示位置と暗号化パスワードでは重要度が異なる。表示位置は初期値へ戻せる場合があるが、連携に使う資格情報を推測で補って処理を続けることはできない。

保存場所を基準に一律の復旧方法を決めず、値の用途を基準に停止・復旧を検討した。

保存場所が同じでも、影響で扱いを分ける

+の付いた項目を選ぶと、詳しい説明が下に表示されます。

保存場所が同じでも、影響で扱いを分ける資格情報とUI設定では復旧の条件が異なります。レジストリ情報知識・根拠暗号化パスワード知識・根拠UIの表示位置既存システム・工程異常時は処理停止判断・確認初期値へ復帰可能評価・再利用保存場所が同じでも、影響で扱いを分ける資格情報とUI設定では復旧の条件が異なります。レジストリ情報知識・根拠暗号化パスワード知識・根拠UIの表示位置既存システム・工程異常時は処理停止判断・確認初期値へ復帰可能評価・再利用

詳しい説明

気になる項目を選ぶと、その役割や判断理由を確認できます。

レジストリ情報

レジストリには資格情報とUIの設定など、用途の異なる値があります。同じ保存場所でも影響は同じではないため、値が使われる先を基準に対応を分けました。

暗号化パスワード

暗号化パスワードは外部システムとの連携に使います。不正な値を推測で補って進めることはできないため、安全性を優先して停止・復旧方法を検討しました。

UIの表示位置

UIの表示位置は、資格情報とは業務への影響が異なります。低影響の値では初期値へ戻せる場合があることを踏まえ、一律の復旧処理にはしませんでした。

異常時は処理停止

資格情報の正常性を確認できない場合は処理を止めます。利用者には再インストールを案内し、OSやユーザープロファイルまでアプリケーションで修復する範囲には広げませんでした。

初期値へ復帰可能

UIの表示位置は初期値へ戻す選択ができる場合があります。同じ対応を資格情報へ適用せず、用途と影響を見て復旧の条件を判断しました。

呼出しのタイミングを調べ、変更範囲を決める

読出し・復号は起動時だけに実行されるわけではない。特定機能の実行や外部連携の前、設定変更時の暗号化・保存も確認対象になる。APIの呼出し箇所だけでなく、その後に値を使う処理まで追い、エラーを検出する位置と止める位置を対応させた。

呼出し箇所だけでなく、利用するタイミングを見る

+の付いた項目を選ぶと、詳しい説明が下に表示されます。

呼出し箇所だけでなく、利用するタイミングを見る起動・機能実行・設定変更を区別して調べます。起動・機能実行既存システム・工程設定変更人間読出し知識・根拠暗号化・保存既存システム・工程復号既存システム・工程外部連携既存システム・工程呼出し箇所だけでなく、利用するタイミングを見る起動・機能実行・設定変更を区別して調べます。起動・機能実行既存システム・工程設定変更人間読出し知識・根拠暗号化・保存既存システム・工程復号既存システム・工程外部連携既存システム・工程

詳しい説明

気になる項目を選ぶと、その役割や判断理由を確認できます。

起動・機能実行

起動時だけでなく、特定機能の実行や外部連携の前にも値が読み出されます。APIの呼出し箇所と、その後の処理まで調べて異常を検出する位置を確認しました。

設定変更

設定変更時には、変更した値を暗号化して保存します。利用時の読出し・復号とは呼出しの目的が異なるため、両者の経路を区別して調べました。

読出し

利用する値をレジストリから読み出す処理を確認しました。値がない場合や読出し失敗を含め、復号と外部連携へどう渡るかを追いました。

暗号化・保存

設定変更に伴う暗号化APIとレジストリへの保存を確認しました。正常処理を維持しながら、失敗を検出して危険な後続処理を止める位置を検討しました。

復号

読み出した暗号化済みの値を復号する処理です。失敗した値を利用しないよう、戻り値と外部連携までの処理を照合しました。

外部連携

復号した値が外部処理で使われるまでを確認しました。コードの呼出し箇所だけでなく値の用途を追い、誤った値で進ませない停止条件へつなげました。

この調査によって、正常処理を大きく変えずに、どの異常系へ対応すべきかを検討する土台を作った。次の段階では、個別の自動復旧を増やすか、安全に停止させるかを比較する。