事例実践事例 / 公開物 / case
第1章 暗号方式の変更で見直すべき異常系を特定する
CRA対応をきっかけに、長年使ってきた暗号方式をCNG・DPAPIへ変更することになった。既存の方式はMD5を内部で用いていたが、変更の対象はAPIの呼び替えだけではない。新しいAPIでは失敗を返すため、保存・読出し・復号の各段階
2026年8月更新履歴
読む目的: AI導入・責任・評価 / AI × ソフトウェア開発 / 事例・実務
このBookの目次(全7章)
現在位置:第1章・全7章
暗号方式の変更は、エラー処理の見直しでもあった
CRA対応をきっかけに、長年使ってきた暗号方式をCNG・DPAPIへ変更することになった。既存の方式はMD5を内部で用いていたが、変更の対象はAPIの呼び替えだけではない。
新しいAPIでは失敗を返すため、保存・読出し・復号の各段階で、失敗後の処理を決める必要があった。
パスワードは、保存時には平文から暗号化してレジストリへ保存し、利用時には読み出して復号し、外部処理へ渡す。どの時点で値が不正になったかによって、後続の処理へ与える影響が異なる。
+の付いた項目を選ぶと、詳しい説明が下に表示されます。
詳しい説明
気になる項目を選ぶと、その役割や判断理由を確認できます。
平文パスワード
設定したパスワードは、保存前には平文の状態です。暗号方式の変更ではAPIだけでなく、この値が保存・利用されるまでの流れを調べ、失敗後の影響を確認しました。
暗号化
平文を暗号化してから保存します。新しい暗号化APIは失敗を返すため、戻り値を確認し、不正な状態で後続へ進ませない処理を検討しました。
保存
暗号化した値をレジストリへ保存します。暗号化の成功と保存の成功を分けて考え、保存失敗や後の値の欠落・破損も調査対象にしました。
読出し
利用時は、保存した暗号化済みの値を読み出します。起動時だけでなく特定機能や外部連携の前にも呼ばれるため、読出し位置と値の利用先をコードで確認しました。
復号
読み出した暗号化済みの値を復号します。失敗した値を平文パスワードとして使わないよう、APIの戻り値と後続処理の停止位置を検討しました。
外部処理で利用
復号した値を必要とする外部処理へ渡します。不正な値を使えば誤った処理や課金につながるリスクがあるため、安全に利用できない場合は停止する方針にしました。これは事故の発生実績を示すものではありません。
エラーの発生箇所と、値が使われる先を合わせて調べる
暗号化APIの失敗、レジストリへの保存失敗、値の欠落・破損・読出し失敗、復号APIの失敗を区別した。特に復号に失敗した値を外部連携で利用すれば、誤った処理や課金へつながるリスクがある。
これは発生した事故の記録ではなく、変更前に検討した影響である。
+の付いた項目を選ぶと、詳しい説明が下に表示されます。
詳しい説明
気になる項目を選ぶと、その役割や判断理由を確認できます。
平文パスワード
保存するパスワードを起点に、暗号化・保存・読出し・復号・利用を追いました。どの時点で値が不正になったかによって後続の影響が異なるため、失敗を一括で扱いませんでした。
暗号化
暗号化APIが失敗を返す条件を確認しました。正常な保存処理を大きく変えるのではなく、失敗した結果を保存や後続処理へ渡さないことを検討しました。
保存
暗号化済みの値を保存できない場合を確認しました。暗号化処理そのものの失敗と区別し、どこで異常を検出するかを整理しました。
読出し
保存値の欠落・破損・読出し失敗を区別しました。保存場所だけで対応を決めず、読み出した値がその後どこで使われるかまで調べました。
復号
復号APIの失敗と、その後の値の扱いを確認しました。正常性を確かめられない場合は、外部処理へ進ませない停止位置を検討しました。
外部処理で利用
不正な値が外部連携で使われると、誤った処理や課金へつながるリスクがあります。実際に発生した事故の記録ではなく、変更前に後続への影響を検討したものです。
同じレジストリでも、UIの表示位置と暗号化パスワードでは重要度が異なる。表示位置は初期値へ戻せる場合があるが、連携に使う資格情報を推測で補って処理を続けることはできない。
保存場所を基準に一律の復旧方法を決めず、値の用途を基準に停止・復旧を検討した。
+の付いた項目を選ぶと、詳しい説明が下に表示されます。
詳しい説明
気になる項目を選ぶと、その役割や判断理由を確認できます。
レジストリ情報
レジストリには資格情報とUIの設定など、用途の異なる値があります。同じ保存場所でも影響は同じではないため、値が使われる先を基準に対応を分けました。
暗号化パスワード
暗号化パスワードは外部システムとの連携に使います。不正な値を推測で補って進めることはできないため、安全性を優先して停止・復旧方法を検討しました。
UIの表示位置
UIの表示位置は、資格情報とは業務への影響が異なります。低影響の値では初期値へ戻せる場合があることを踏まえ、一律の復旧処理にはしませんでした。
異常時は処理停止
資格情報の正常性を確認できない場合は処理を止めます。利用者には再インストールを案内し、OSやユーザープロファイルまでアプリケーションで修復する範囲には広げませんでした。
初期値へ復帰可能
UIの表示位置は初期値へ戻す選択ができる場合があります。同じ対応を資格情報へ適用せず、用途と影響を見て復旧の条件を判断しました。
呼出しのタイミングを調べ、変更範囲を決める
読出し・復号は起動時だけに実行されるわけではない。特定機能の実行や外部連携の前、設定変更時の暗号化・保存も確認対象になる。APIの呼出し箇所だけでなく、その後に値を使う処理まで追い、エラーを検出する位置と止める位置を対応させた。
+の付いた項目を選ぶと、詳しい説明が下に表示されます。
詳しい説明
気になる項目を選ぶと、その役割や判断理由を確認できます。
起動・機能実行
起動時だけでなく、特定機能の実行や外部連携の前にも値が読み出されます。APIの呼出し箇所と、その後の処理まで調べて異常を検出する位置を確認しました。
設定変更
設定変更時には、変更した値を暗号化して保存します。利用時の読出し・復号とは呼出しの目的が異なるため、両者の経路を区別して調べました。
読出し
利用する値をレジストリから読み出す処理を確認しました。値がない場合や読出し失敗を含め、復号と外部連携へどう渡るかを追いました。
暗号化・保存
設定変更に伴う暗号化APIとレジストリへの保存を確認しました。正常処理を維持しながら、失敗を検出して危険な後続処理を止める位置を検討しました。
復号
読み出した暗号化済みの値を復号する処理です。失敗した値を利用しないよう、戻り値と外部連携までの処理を照合しました。
外部連携
復号した値が外部処理で使われるまでを確認しました。コードの呼出し箇所だけでなく値の用途を追い、誤った値で進ませない停止条件へつなげました。
この調査によって、正常処理を大きく変えずに、どの異常系へ対応すべきかを検討する土台を作った。次の段階では、個別の自動復旧を増やすか、安全に停止させるかを比較する。