忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【知識】システムを動かす「仕組み」を作る!「業務設計」の構成要素|情報処理問題1000本ノック

システム開発において、プログラムを作る前の「業務そのものの流れやルール」を定義するのが業務設計です。人・物・情報の動きを具体化するための6つの柱を攻略しましょう。

■ 業務設計における主要な6つの検討項目

単なる処理フローだけでなく、組織やリソース、トラブル時の継続性まで幅広く設計します。

設計項目主な設計内容と具体例
1. 処理設計 業務フローとプロセスの定義
・業務の手順、タイミング(日次・月次など)、具体的な処理方法を可視化します。
2. 非機能設計 サービスレベルの合意(SLA)
・サービス提供時間、レスポンスタイム、可用性などの目標値を設定。必須条件かベストエフォートかを明確にします。
3. 組織設計 役割と責任の定義
・業務を遂行する部門や担当者の役割、承認権限、連絡体制などを設計します。
4. リソース設計 5大資産の配分
・人、物、金、情報、場所に加え、機材や作業スペースなどの経営資源を適切に割り当てます。
5. BCPの検討 事業継続計画(Business Continuity Plan)
・災害やシステム障害などの緊急事態において、業務をどう継続・復旧させるかを検討します。
6. 運用管理設計 モニタリングと評価基準
・業務管理指標(KPI)の設定。データの収集方法や報告のタイミング、改善サイクルを定義します。

実務へのワンポイントアドバイス

業務設計の成否は「例外処理」をどこまで詰め切れるかで決まります。正常系のフローだけでなく、「BCP」の視点を含めたイレギュラーへの備えをセットで検討することが、止まらないシステム作りの鍵となります。

※BCGは通常「ボストン・コンサルティング・グループ」や「プロダクト・ポートフォリオ・マネジメント(PPM)」の文脈で使われますが、業務設計の文脈ではBCP(事業継続計画)として扱うのが一般的です。



PR

【知識】プロジェクトの成功を導く!「開発手法」の全容|情報処理問題1000本ノック

開発手法は、時代やプロジェクトの性質に合わせて進化してきました。大きく分けて「伝統的な手法」「アジャイル系」「品質・設計重視型」の視点で整理しましょう。

開発手法一言説明(特徴・目的)
ウォーターフォール 要件定義から順に、上流から下流へ滝のように戻ることなく進める最も標準的な手法。
Vモデル開発 開発工程(左側)とテスト工程(右側)を対応させ、検証(検収)作業を明確にしたモデル。
スパイラル開発 設計と試作(プロトタイプ)を繰り返し、徐々にリスクを排除しながら螺旋状に規模を拡大する。
反復開発 システムを小さな単位に分割し、短期間のサイクル(イテレーション)を繰り返して完成させる手法の総称。
アジャイル開発 柔軟な計画と短期間の反復を重視し、顧客との対話を通じて動くソフトウェアを迅速に提供する手法。
XP (エクストリーム・プログラミング) ペアプログラミングやテスト駆動開発など、技術的実践を通じて変化への対応力を高める。
クリスタル開発 プロジェクトの規模や重要度(色)に応じて、手法の厳密さを柔軟に使い分ける手法。
DSDM 時間の制約(タイムボックス)を優先し、ビジネス価値を迅速に届けるための英国発祥のアジャイル手法。
リーン トヨタ生産方式を源流とし、徹底的に「ムダ」を省いて価値提供の効率を最大化する考え方。
構造化開発 機能を段階的に詳細化(トップダウン)し、プログラムを単純な構造の組み合わせで構築する手法。
オブジェクト指向開発 データと手続きを「オブジェクト」としてまとめ、再利用性や保守性を高める設計手法。
データ中心設計 (DOA) 機能よりも先に、変化しにくい「データの構造」に着目してシステムを設計する手法。
パターンベース開発 過去の成功例である「デザインパターン」などを再利用して、効率的に設計・開発を行う。
クリーンルーム開発 数学的検証に基づき、バグの混入を未然に防いで「無欠陥」のソフトウェアを目指す高品質重視の手法。
RAD (Rapid Application Development) CASEツールやプロトタイプを用い、少人数で短期間にシステムを完成させることを目指す。
RUP (Rational Unified Process) オブジェクト指向を基盤とし、ユースケース駆動・リスク中心で進める反復型の開発フレームワーク。
JAD (Joint Application Development) ユーザーと開発者が一堂に会して集中討議を行い、合意形成を加速させる要件定義の手法。
PSP / TSP 個人のスキル向上(PSP)とチームのプロセス管理(TSP)を通じて、予測通りの納期と品質を達成する。

※これらの手法は独立しているわけではなく、たとえば「アジャイルという大きな枠組みの中にXPやリーンがある」といった関係性や、「オブジェクト指向という設計思想をウォーターフォールで使う」といった組み合わせが実際の現場ではよく見られます。

【情報セキュリティ】被害を最小限に抑える!「対策の3段階分類」|情報処理問題1000本ノック

セキュリティ対策は、単に「守る」だけではありません。万が一の発生を想定し、いかに早く気づき、いかに適切に対処するかという多層的な視点が不可欠です。対策の3つの柱を攻略しましょう。

1. 問題:セキュリティ対策の役割による分類

【 問題 】 情報セキュリティ対策のうち、不正アクセスやマルウェア感染などのインシデントが「発生したこと」を早期に突き止め、管理者に通知する役割を持つものはどれでしょうか?

ア、防止機能   イ、検出機能   ウ、対応機能   エ、抑止機能

2. 正解:セキュリティ管理に関する正解

正解: イ、検出機能

3. 解説:守り・気づき・動くのサイクル

セキュリティ対策は、その目的(機能)によって大きく3つに分類されます。これらを組み合わせることで「多層防御」を実現します。

【図解:対策の3大分類】

1. 防止機能 (Preventive)
・インシデントが起きないようにするための対策。
・例:ファイアウォール、アクセス制御、暗号化、入退室管理。

2. 検出機能 (Detective) ★今回の正解
・インシデントが起きたことに気づくための対策。
・例:IDS(侵入検知システム)、ログ監視、ウイルススキャン、検印。

3. 対応機能 (Corrective/Responsive)
・起きてしまった後に被害を抑え、復旧させるための対策。
・例:バックアップからのリストア、CSIRTによる緊急対応、システムの隔離。
[ 補足:もう一つの「抑止」 ]
抑止機能 (Deterrent):防犯カメラの設置や罰則規定の明示など、「攻撃を思いとどまらせる」心理的な対策を指します。

1. 理解のコツ: 「防止」は家の鍵をかけること、「検出」は防犯アラームが鳴ること、「対応」は警備員が駆けつけたり保険を適用したりすること、とイメージすると非常に分かりやすくなります。
2. 試験対策の視点: 各具体的な技術(例えば「IDS」や「バックアップ」)が、この3つのうちどこに分類されるか、という組み合わせ問題がよく出題されます。それぞれの対策の「一番の目的」が何かを考えましょう。


4. まとめ

「防ぐ・見つける・対処する」。この3つの機能が揃って初めて、実効性のあるセキュリティ体制となります。インシデントは100%防げないという前提に立ち、特に検出対応を強化するのが現代のトレンドです。

【情報セキュリティ】予測不能な数列を作る!「擬似乱数とシード」|情報処理問題1000本ノック

暗号化の鍵や、ワンタイムパスワードの生成には「予測できない数字(乱数)」が不可欠です。限られたデータから計算によって乱数を作り出す仕組みと、その起点となる情報の重要性を攻略しましょう。

1. 問題:擬似乱数の生成原理

【 問題 】 擬似乱数生成器において、乱数の数列を決定するための起点となる初期値のことを何と呼ぶでしょうか?

ア、ソルト   イ、シード(種)   ウ、ノンス   エ、初期化ベクトル(IV)

2. 正解:暗号技術に関する正解

正解: イ、シード(種 / Seed)

3. 解説:再現性と予測不可能性のバランス

コンピュータは純粋な偶然を作り出すのが苦手なため、特定の数式(アルゴリズム)を用いて乱数に似た数列を生成します。これが「擬似乱数」です。

【図解:擬似乱数生成の仕組み】

■ シードの役割
・計算の「最初の入力値」です。同じシードを与えると、全く同じ乱数の数列が生成されます。
・そのため、セキュリティ用途ではシードに「現在の時刻(ミリ秒単位)」や「マウスの動き」など、他人が予測できない値を混ぜて使います。

■ 擬似乱数関数 (PRF)
・シードを入力として受け取り、統計的に偏りのない、ランダムに見える値を次々と出力する関数です。
[ 似た用語との違い ]
ソルト (Salt):パスワードハッシュ化の際、辞書攻撃を防ぐために付け加えるデータ。
ノンス (Nonce):一度きりの使い捨ての数字。リプレイ攻撃の防止などに使われます。
初期化ベクトル (IV):ブロック暗号(CBCモードなど)の最初のブロック処理で使われる値。

1. 理解のコツ: 擬似乱数は「非常に複雑な計算式の答え」を順番に並べたものです。シードはその式の「最初の変数」にあたります。変数が同じなら答えも同じになるため、シードを秘密に保つことが暗号の安全性に直結します。
2. 試験対策の視点: 「再現性がある(シードが同じなら同じ値が出る)」という特徴と、「予測不可能性(次の値が推測できないこと)」の重要性がよく問われます。暗号学的に強い擬似乱数は「過去の出力から未来の出力を推測できない」性質が求められます。


4. まとめ

「乱数生成の起点となる初期値」。これがシード(種)です。一見ランダムに見える数字の裏側には、このシードに基づいた厳密な計算アルゴリズムが存在していることを押さえておきましょう。



【情報セキュリティ】最強の解読条件!「選択暗号文攻撃」|情報処理問題1000本ノック

暗号解読のシナリオにおいて、攻撃者が「復号(元に戻す)プロセス」を自由に利用できる場合があります。攻撃者が最も優位に立つこの手法の脅威を攻略しましょう。

1. 問題:暗号解読の高度な攻撃モデル

【 問題 】 暗号解読における攻撃手法のうち、攻撃者が任意に選択した「暗号文」をターゲットのシステムに復号させ、それに対応する「平文」を入手することで、鍵の特定や情報の奪取を試みる手法はどれでしょうか?

ア、暗号文単独攻撃   イ、既知平文攻撃   ウ、選択平文攻撃   エ、選択暗号文攻撃

2. 正解:暗号攻撃手法に関する正解

正解: エ、選択暗号文攻撃(Chosen Ciphertext Attack / CCA)

3. 解説:復号器を「オラクル(神託)」として利用する

選択暗号文攻撃は、攻撃者が「中身(鍵)は分からないが、入力した暗号文を復号してくれる装置」を自由に使える極めて強力な攻撃モデルです。

【図解:選択暗号文攻撃のイメージ】

■ 攻撃の手順
1. 攻撃者が、解読したい暗号文を少しだけ加工した「偽の暗号文」を自由に作成する。
2. それをターゲットの復号システムへ送り、復号結果(平文)を入手する。
3. 得られた平文のパターンを分析し、そこから本物の暗号文を解くための「鍵」を数学的に割り出す。

■ なぜそんなことが可能なのか?
・例えば、サーバーが「復号に失敗した」というエラーメッセージを返したり、復号にかかった時間の差(サイドチャネル攻撃)を利用したりすることで、実質的に復号結果の一部を知ることができる場合があります。
[ 攻撃手法の強さの階層 ]
選択平文攻撃 (CPA):好きな平文を「暗号化」できる。
選択暗号文攻撃 (CCA):好きな暗号文を「復号」できる。 ← 最も強力!
※ 現代の公開鍵暗号(RSAなど)は、このCCAに対して耐性を持つ「適応的選択暗号文攻撃 (IND-CCA2) 安全性」が求められます。

1. 理解のコツ: 攻撃者が「魔法の翻訳機」をこっそり借りているような状態です。解読したい暗号文そのものは復号させてもらえなくても、それに似た暗号文を大量に試すことで、内部の鍵の仕組みを暴き出します。
2. 試験対策 of 視点: 「任意に選んだ暗号文」という言葉があれば、この選択暗号文攻撃が正解です。特にRSAなどの公開鍵暗号の脆弱性(パディング・オラクル攻撃など)と関連して議論されることが多いトピックです。


4. まとめ

「攻撃者が選んだ暗号文の復号結果を利用して解読する」。これが選択暗号文攻撃です。この攻撃に耐えられることが、現代の高度なセキュリティ製品における事実上の標準要件となっています。


【情報セキュリティ】暗号化の仕組みを逆手に取る!「選択平文攻撃」|情報処理問題1000本ノック

暗号を解読する手法にはいくつか種類がありますが、攻撃者が自由に「テストデータ」を暗号化できる環境にある場合、解読の難易度は大きく変わります。この戦略的な攻撃手法を攻略しましょう。

1. 問題:暗号解読の攻撃モデル

【 問題 】 暗号解読における攻撃手法のうち、攻撃者が任意に選択した平文を、解読したい暗号化アルゴリズムによって暗号化させ、それに対応する暗号文を入手することで、鍵や隠された情報を推測しようとする手法はどれでしょうか?

ア、暗号文単独攻撃   イ、既知平文攻撃   ウ、選択平文攻撃   エ、選択暗号文攻撃

2. 正解:暗号攻撃手法に関する正解

正解: ウ、選択平文攻撃(Chosen Plaintext Attack / CPA)

3. 解説:自由に「実験」ができる攻撃者

選択平文攻撃は、攻撃者が「暗号化を行う装置(ブラックボックス)」を自由に使える状態にあることを想定した、非常に強力な攻撃手法です。

【図解:選択平文攻撃のイメージ】

■ 攻撃の手順
1. 攻撃者が「AAAAA」や「12345」など、特定のパターンを持つ平文を自由に選ぶ
2. それをターゲットのシステムに放り込み、出てきた暗号文を観察する
3. 平文の変化に対して暗号文がどう変わるかの法則性を分析し、鍵を特定しようとする。

■ なぜそんなことが可能なのか?
・例えば、ICカードや暗号チップなどを物理的に入手した場合、内部の鍵は見えなくても、「好きなデータを入力して暗号化させる」ことは可能です。この状況が選択平文攻撃のチャンスとなります。
[ 攻撃レベルの比較 ]
暗号文単独:暗号文しか持っていない(最も難しい)。
既知平文:偶然手に入れた「過去の平文と暗号文のペア」を使う。
選択平文:自分でペアを自由に作れる(より強力)。
選択暗号文:特定の暗号文を「復号」させた結果を得られる(最強)。

1. 理解のコツ: 攻撃者が「暗号化マシンを借りている」ような状態です。好きな言葉を入力して、どう変わるかを何度も試せるので、ただ暗号文を眺めているだけの攻撃より格段に効率よく解読が進みます。
2. 試験対策の視点: 「攻撃者が任意に選んだ平文」というフレーズがあれば、この選択平文攻撃が正解です。また、これに耐えられる暗号(安全性)を「選択平文攻撃に対して安全である」と表現します。


4. まとめ

「攻撃者が選んだ平文のペアを利用して解読する」。これが選択平文攻撃です。現代の暗号アルゴリズムは、この攻撃を受けても鍵を特定されないような高度な数学的強度が求められています。


【基礎理論】計算機が抱える限界!「丸め誤差」の仕組み|情報処理問題1000本ノック

コンピュータは無限に続く数値を扱うことができません。限られた桁数で数値を表現しようとしたときに発生する「丸め誤差」の性質を攻略しましょう。

1. 問題:数値計算における誤差の種類

【 問題 】 数値計算において、指定された有効桁数やビット数に収めるために、最小桁より下の部分を四捨五入、切り捨て、または切り上げることによって生じる誤差を何と呼ぶでしょうか?

ア、丸め誤差   イ、打切り誤差   ウ、桁落ち   エ、情報落ち

2. 正解:数値計算に関する正解

正解: ア、丸め誤差

3. 解説:入り切らない「端数」の処理

コンピュータのメモリは有限です。そのため、計算結果が非常に長い小数になった場合、どこかの桁で「丸める(端数を処理する)」必要があります。

【図解:丸め誤差が発生するケース】

■ 典型的な例
・1 ÷ 3 = 0.333333... と無限に続く値を、小数第3位で丸めて「0.333」とした場合、本来の値との間に 0.000333... の差が生まれます。これが丸め誤差です。

■ 2進数特有の問題
・人間にとってキリの良い「0.1」のような数値も、コンピュータの内部(2進数)では無限小数になります。このため、単純な加算を繰り返すだけでも丸め誤差が蓄積することがあります。
[ 他の誤差との違いをチェック! ]
打切り誤差:計算を途中で打ち切ることで生じる誤差(例:無限級数の計算を100項で止める)。
桁落ち:値が非常に近い数同士の引き算で、有効桁数が激減すること。
情報落ち:極端に大きい数と小さい数を足したとき、小さい数が無視されること。

1. 理解のコツ: 「丸める(Round)」という言葉の通り、四捨五入などで数値を近似値に置き換えた際に生じる「理想と現実のズレ」のことです。
2. 試験対策の視点: 誤差の定義を問う問題は頻出です。「四捨五入」「切り捨て」「桁数制限」といったキーワードがあれば、丸め誤差を選択しましょう。また、浮動小数点数の構造と関連付けて出題されることもあります。


4. まとめ

「限られた桁数に収めるための端数処理で生じる誤差」。これが丸め誤差です。プログラミングやシステム設計において、わずかな誤差が大きな不具合に繋がる可能性があることを意識しておきましょう。


【基礎理論】精度の証!指数表記と「有効桁数」の数え方|情報処理問題1000本ノック

科学計算や情報の基礎理論において、数値のどこまでが「信頼できる測定値」なのかを示すのが有効桁数です。特に指数表記における扱いは、計算誤差を防ぐための必須知識です。

1. 問題:指数表記における有効桁数の判定

【 問題 】 数値 5.40 × 103 を有効桁数を考慮して記述した場合、この数値の有効桁数は何桁でしょうか?

ア、1桁   イ、2桁   ウ、3桁   エ、4桁

2. 正解:数値表現に関する正解

正解: ウ、3桁

3. 解説:仮数部が「精度」を決める

指数表記(a × 10n 形式)において、有効桁数は「仮数部 a」に現れる数字の個数によって決まります。

【図解:有効桁数の数え方ルール】

■ 指数表記の仮数部に注目
・5.40 × 103 の場合、仮数部は 「5.40」 です。
・この 「5」「4」「0」 の3つが、測定によって得られた意味のある数字です。

■ 末尾の「0」の重要性
・単に 5400 と書くと、有効桁数が2桁(54まで)なのか3桁(540まで)なのか判別できません。
・5.40 × 103 と書くことで、「小数第2位の0まで正確に測った」という意思表示になり、有効桁数は3桁となります。
[ 桁数決定のポイント ]
先頭の0は数えない:0.0012 → 1.2 × 10-3(2桁)
途中の0、末尾の0は数える:1.002(4桁)、5.0 × 102(2桁)
指数部は関係ない:10n の部分は小数点の位置を示すだけで、精度には影響しません。

1. 理解のコツ: 指数表記は「誤差の範囲を明確にするためのマナー」です。5.4 × 103 なら 5350 ~ 5450 の範囲、5.40 × 103 なら 5395 ~ 5405 の範囲を指していることになり、後者の方がより「精密」であることを表しています。
2. 試験対策の視点: 「乗算・除算の計算結果は、有効桁数が最も少ないものに合わせる」というルールがよく出題されます。まずは、指数表記から「この数値は何桁の精度があるのか」を正しく見抜くことが第一歩です。


4. まとめ

「指数表記の有効桁数は、仮数部の数字をそのまま数える」。これが有効桁数の鉄則です。末尾の「0」を省略せず書くことで、計算の正確さを相手に正しく伝えることができるようになります。


【情報セキュリティ】逆転の発想で復号する!「フェイステル構造」|情報処理問題1000本ノック

AESのSPN構造と並び、共通鍵暗号の設計における二大構造の一つが「フェイステル構造」です。かつての標準暗号DESにも採用された、この巧妙な仕組みを攻略しましょう。

1. 問題:ブロックを分割する暗号構造

【 問題 】 ブロック暗号の設計において、入力データを左右二つに分割し、一方のデータから生成した値ともう一方のデータのXOR(排他的論理和)をとる処理を、左右入れ替えながら繰り返す構造を何と呼ぶでしょうか?

ア、SPN構造   イ、フェイステル構造   ウ、ストリーム構造   エ、公開鍵構造

2. 正解:暗号アルゴリズムに関する正解

正解: イ、フェイステル構造(Feistel構造)

3. 解説:同じ回路で「暗号化」も「復号」も

フェイステル構造は、計算の過程でデータを左右に分け、片方ずつ加工していくのが特徴です。その最大のメリットは「実装の効率性」にあります。

【図解:フェイステル構造の仕組み】

■ 基本的な動き
1. 入力ブロックを左(L)と右(R)に半分ずつ分ける。
2. 右側(R)とラウンド鍵を関数に入れ、その結果と左側(L)のXORをとる。
3. 新しい左側として「元のR」、新しい右側として「2の結果」を使い、左右を入れ替えて次のラウンドへ。

■ 最大の特徴:可逆性
・この構造は、内部で使われる関数がどんなに複雑(あるいは不可逆)であっても、「逆順に処理するだけで必ず元に戻せる」という数学的性質を持っています。
・そのため、暗号化と復号で全く同じ回路やプログラムを使い回すことができます。
[ 代表的な採用アルゴリズム ]
DES (Data Encryption Standard):世界で最も有名なフェイステル構造の暗号です。
Camellia (カメリア):日本で開発された、非常に強固で高速なフェイステル構造の暗号です。

1. 理解のコツ: データを半分ずつ交互に「鍵をかける」イメージです。全部一度に加工するSPN構造(AES)に対し、半分ずつ慎重に処理していくのがフェイステル

【情報セキュリティ】鉄壁の防御を支える数学!AESの「SPN構造」|情報処理問題1000本ノック

無線LANやWeb通信など、現代のあらゆる場所で使われている共通鍵暗号方式「AES」。その強固な安全性を支える内部アルゴリズムの仕組みを攻略しましょう。

1. 問題:AESのアルゴリズム構造

【 問題 】 共通鍵暗号方式のAESにおいて、データをバイト単位で置き換える「置換(Substitution)」と、位置を入れ替える「変換(Permutation)」、さらにラウンド鍵とのXOR(排他的論理和)演算を繰り返すことで暗号化を行う構造を何と呼ぶでしょうか?

ア、Feistel構造   イ、SPN構造   ウ、ハッシュ構造   エ、公開鍵構造

2. 正解:暗号アルゴリズムに関する正解

正解: イ、SPN構造(Substitution-Permutation Network)

3. 解説:撹乱と拡散のネットワーク

SPN構造は、データを細かくかき混ぜることで、平文と暗号文の統計的な関係を徹底的に隠蔽する設計になっています。

【図解:AES(SPN構造)の4つの処理】

1. SubBytes(置換)
・Sボックスと呼ばれる変換表を使い、バイト単位で値を別の値に置き換えます。

2. ShiftRows(行のシフト)
・データを並べた行列の各行を、一定の規則で不規則に横方向にスライドさせます。

3. MixColumns(列の混同)
・ビット演算(行列演算)を用いて、列内のデータを複雑に混ぜ合わせます。

4. AddRoundKey(鍵加算)
・そのラウンド専用の「ラウンド鍵」とデータの間でXOR(排他的論理和)をとります。
[ Feistel構造との比較 ]
Feistel(フェイステル)構造:データを左右半分に分け、片方を加工してもう片方と混ぜる方式。旧標準のDESなどで採用されていました。
SPN構造:一度にデータ全体を処理するため、少ないラウンド数で高い安全性を確保でき、並列処理もしやすいのが特徴です。

1. 理解のコツ: 料理に例えると、材料を全く別の形に切り(置換)、ボウルの中で激しくかき混ぜ(シフト・混同)、最後にスパイス(鍵)を加える、という工程を何度も繰り返して、元の形が一切分からない「暗号」という料理を完成させるイメージです。
2. 試験対策の視点: 「AES」=「SPN構造」、「DES」=「Feistel構造」という対応関係は頻出です。また、SPN構造の利点として「全ビットを一度に拡散できるため効率が良い」点も押さえておきましょう。


4. まとめ

「置換、シフト、ビット演算、XORの繰り返し」。これがSPN構造です。この数学的に洗練された構造によって、AESは非常に高速かつ解読困難な暗号として世界中で信頼されています。