メインコンテンツへ
セキュリティセキュリティ実践

コードサイニング(コード署名)に関する記述として、最も適切なものはどれか。

ア.ソフトウェアのソースコードを難読化し、リバースエンジニアリングによる解析を困難にする技術。
イ.ソフトウェア開発者がプログラムに電子署名を付与することで、配布後の改ざんを検出し開発元の正当性を証明する技術。正解
ウ.開発者の秘密鍵で暗号化されたコードを配布し、利用者が復号して実行することでウイルス感染を防ぐ技術。
エ.コードの品質を担保するために、自動テストを実行してバグがないことを確認し証明書を発行する技術。

解説

コードサイニングは「ソフトウェアへの公式封印シール」。開封済みシールがあれば偽造品か改ざん品とすぐわかり、正規品かどうかを誰でも確認できます。

なぜ イ が正解か

イが正解。コードサイニングは開発者が秘密鍵でコードのハッシュ値に電子署名を付与し配布する技術。利用者は開発者の公開鍵で署名を検証し、「このソフトは本物のXX社が作り、配布後に改ざんされていない」と確認できる。コード自体を暗号化・復号する技術ではなく、署名による真正性・完全性の証明が目的。

なぜ ア は間違いか

ソースコードを難読化してリバースエンジニアリングを困難にするのはコード難読化(obfuscation)の技術。コードサイニングは難読化とは無関係で、改ざん検出と開発元証明が目的。

なぜ ウ は間違いか

コードサイニングはコード自体を暗号化して配布する技術ではない。秘密鍵で「ハッシュ値」に署名するのであって、コード本体は暗号化しない。利用者は復号ではなく署名検証を行う。

なぜ エ は間違いか

自動テストでバグがないことを確認し証明書を発行するのはCI/CDパイプラインやソフトウェア品質認証の話であり、コードサイニングとは別物。コードサイニングは品質保証ではなく、開発者の同一性と整合性の保証が目的。

出典: AI生成問題(学習用)