最近、パソコンやITへの知識欲が増えてきて、今までは面倒くさいとか勉強する時間がないとかで、ずっと先延ばしにしていた基本情報技術者試験勉強を始めることにしました。午前は今の知識でも何とか行けそうな気がしましたが、午後はやはり綿密な準備をしないと難しいと思い、次の本を購入しました。

情報処理教科書 出るとこだけ! 基本情報技術者「午後」

試験対策用に買った本ですが、内容も綺麗にまとまっていますし、自分のフィードバック資料にも使うために、更に内容を圧縮して私なりに内容を整理したいと思いました。まだまだ勉強中のため、どんどん内容を更新して行く予定です。1冊目が終わって、本を追加購入した際は、更に内容が増える可能性があります。

暗号化

  • 公開鍵暗号方式
    暗号化と復号で、別々の鍵を使う暗号方式。

    • 暗号化
      公開鍵を使って平文を暗号化し、ペアの秘密鍵でしか復号できない。
    • ディジタル署名
      秘密鍵を使って平文を暗号化し、ペアの公開鍵でしか復号できない。
    • RSA
      公開鍵暗号方式の代表格の暗号技術。
  • ハイブリッド暗号
    平文を共通鍵で暗号化し、その共通鍵を公開鍵暗号方式で暗号化する方式。

    • 共通鍵暗号方式
      暗号化と復号で自動生成した同じ鍵を使う。処理速度が早い。
  • ハッシュ関数
    改ざんなしを確認する計算方法。ディジタル署名で使われる。

    • ハッシュ化
      平文をハッシュ関数で計算し、メッセージダイジェストを作る。
    • ハッシュ化の特徴
      1. 異なる平文から同一のダイジェストは作成できない。
      2. ダイジェストから平分は作れない。※不可逆性
      3. 受信者は、受信した平文をハッシュ化し、ダイジェストを作る。
      4. 受信者は、②のダイジェストと③のダイジェストを比較する。
  • ディジタル署名と暗号化
    なりすましと盗聴なしを確認できるため、多くの暗号技術で採用される暗号方式。

    • 暗号化の手順
      1. 送信者は平文をハッシュ化し、ダイジェストを作る。
      2. 送信者はダイジェストを送信者の秘密鍵で暗号化する。
      3. ダイジェストと平文を受信者の公開鍵で暗号化して、受信者に送る。
      4. 受信者は、受信したダイジェストと平文を、受信者の秘密鍵で復号する。
      5. 暗号化されたダイジェストを送信者の公開鍵で復号する。
      6. 平文をハッシュ化し、ダイジェストを⑤のダイジェストと比較する。
  • PKI
    なりすましなしで、本人の公開鍵であると認証する仕組み。

    • 認証局(CA)
      ディジタル署名を発行する機関
    • なりすましなしの確認手順
      1. 送信者は公開鍵と秘密鍵を作成し、認証局に身分証明書を提出して申請する。
      2. 認証局が承認し、提出されたディジタル署名入りのディジタル証明書を発行する。
      3. 送信者は受信者にメールとディジタル署名・ディジタル証明書を送る。
      4. 受信者が認証局を信頼し、認証局が送信者を認証すれば、送信者を信頼できる。

スケジュール管理

  • プロジェクトマネジメント
    プロジェクトを管理するために行う、効果的な取組みと仕組みのこと。

    • PMBOKガイド
      米国プロジェクトマネジメント協会が策定した手本集。
    • PDCAマネジメントサイクル
      Plan(計画)⇒ Do(実施)⇒ Check(検証)⇒ Act(対処)⇒ Plan...
  • スケジュール管理
    情報システム開発の設計・開発・テストの進み具合を管理すること。

    • 開発規模
      開発するプログラムの総量。
      • 本数
        プログラムの本数。
      • kステップ
        プログラムの桁数。(1k = 1000行)
    • 工数
      必要な作業量を表す数値。
      • 人月
        1人が1ヶ月かけて行う作業量。(人月 = 人 × 月)
      • 人時
        1人が1時間かけて行う作業量。(人月 = 人 × 時間)
    • 生産性
      1人時当たりや1人月当たりに作成できるプログラムの本数やステップ数。
      • 本/人時
        1人時当たりに作成するプログラムの本数。
      • kステップ/人月
        1人月当たりに作成するプログラムの本数。
    • こせきの式
      工数・生産性・開発規模を求めるための計算式。
      ∴開発規模(き)/ 工数(こ)× 生産性(せ)
      • 例)工数30(人月)、生産性(10)の場合、開発規模は?
        30(人月)× 10(本/人月)= 300(本)

オブジェクト指向設計

  • オブジェクト志向
    汎用性が高く、ミスが少なく、作業効率がよいシステムを開発するための考え方。

    • 汎用性が高い
      一度書いたプログラムを部品として再利用することにより、汎用性が高くなる。
    • ミスが少なく、作業効率がよい
      変数と処理を一つのクラスにまとめて、権限を与えることでトラブルを削減できる。
  • UML
    オブジェクト志向に基づいて、設計と分析を行うための表記法・設計図。

    • クラス図
      クラスとクラスの相互関係を表す図。
    • 集約
      クラスと別のクラスが「全体と部分」の関係であることを表現する。
      全体を意味するクラス側に◇を付ける。
    • 多重性
      クラスとクラスが何個と何個の関係であるかを表す表記。
      「1」「0..1」「0..*」「1..*」で表す。
    • 汎化
      似ているが少し異なるプログラムの場合、共通クラス(汎化)と差異クラス(特化)に分ける。
      汎化を意味するクラス側に△を付ける。

データベース設計

  • データベース設計
    関係データベースで、表や表の中の列を設計すること。
    • 列設計の原則
      1. 1つのデータは関係データベース内の1ヶ所のみに格納する。
      2. 関係データベースでは列を増やしたり減らしたりしない。
      3. 1つの表に様々な種別のデータを詰め込まずに、表を分離する。
    • 正規化
      最適な列を設計するための手順。
      • 非正規化
        表にしたいデータをそのままにした状態。
      • 第1正規化
        繰り返し要素を排除した状態。
      • 第2正規化
        主キーに値が連動する別の列を探して表を分割した状態。
      • 第3正規化
        主キー以外に値が連動する別の列を探して表を分割した状態。
    • 正規化と整合性
      正規化を進めることによって以下の問題点が改善され、整合性が向上する。
      • 重複更新
        重複する値の行がある場合、他の行も更新しなければならない。
      • 事前登録
        商品注文の場合、表を分割しないと、商品名などの事前登録ができない。
      • 関係喪失
        商品注文の場合、表を分割しないと、商品名などの必要なデータも削除されてしまう。

情報セキュリティ対策

  • ファイアウォール
    インターネット(外部)とLAN(内部)の境界に配備し、外部から内部への不正侵入を遮断する。
    • パケットフィルタリング型
      ルールを設定し、そのルールに従って通信をフィルタリングする。
      • ブラックリスト
        通信の通過を禁止する対象をまとめた一覧で、それ以外の通過を許可する。
      • ホワイトリスト
        通信の通過を許可する対象をまとめた一覧で、それ以外の通過を禁止する。
      • ポート番号
        通信の種別を識別するための番号。ポート番号は部屋番号、ポートは部屋に例えられる。
    • DMZ
      危険が多いインターネットと、安全なLANの境界に位置し、ファイアウォールが2台の間に存在する。
      • 特徴
        1. 外側のファイアウォールでは、インターネットからDMZへの通信はDMZ(公開サーバ)に限る。
        2. 内側のファイアウォールでは、DMZからLANへの通信はすべて禁止する。
        3. LANからDMZへの通信と、DMZからインターネットへの通信は、すべて許可する。
    • プロキシサーバ
      LANとインターネットの境界に配備し、インターネットとの接続を代理する機器。
      • 特徴
        1. 受信したWebページを、一時保存するキャッシュ機能により、通信を減らし高速表示する。
        2. プロキシサーバ上のファイルのマルウェアを検出できる。
    • リバースプロキシ
      インターネットとWebサーバの境界に配備し、Webサーバへの接続を代理する機器。
      • 特徴
        1. インターネットからWebサーバへの接続を間接的に行うため、Webサーバへの直接攻撃を防ぐ。
        2. 処理に時間がかかる暗号化通信を代理にし、Webサーバの負担を軽減する。
  • その他
    • IDS・IPS
      ネットワークやホストを監視し、不正アクセスなどの異常を発見し、管理者への通報と攻撃を防ぐ。
    • WAF
      WEBアプリケーションを攻撃から防ぐ。

機械語命令

  • 機械語
    CPUが直接読み取れる形式のプログラム言語。すべてのプログラムは最終的に機械語に翻訳される。
    • 基数変換
      ある基数から別の基数へ、値の表示形式を変換すること。
      • X進数 ⇒ 10進数
        数値を各桁に分割し、重みを掛けて、各桁ごとに足す。
      • 10進数 ⇒ X進数
        数値をX進数のXで0になるまで割り、余りを下から上へ並べる。
      • 2進数 ⇒ 16進数
        数値を4桁ごとに分けて、その4桁を1桁基数変換する。
        例)01011010 ⇒ 5A
    • 機械語命令を実行する手順
      機械語(16進数)2061 1000hを例とした手順となる。
      ※試験問題対策の手順だが、機械語命令の参考用として残しておく。
      • ビット分割
        1. 分割した値が入る記号 ⇒ OP(8)R(2)X(2)F(3)I(1)adr(16)
          ※括弧の中はビット数
        2. 基数変換後、記号へ代入 ⇒ 20h 01 10 000 1 1000h
          ※4の倍数のビットは16進数表示(h:hex)
      • 実行アドレスの算出
        (表)[adr+[X]] ⇒ [1000h+[レジスタ2]] ⇒ [1000h+0003h] ⇒ [1003h] ⇒ 1004h
      • 機械語命令のトレース
        記号OPの値を(表)命令の仕様に当てはめて動作を読み取り、命令を実行する。
        その結果の値をレジスタやメモリにトレースする。
  • 機械語命令の種類
    • 設定命令
      レジスタやメモリに値を設定する命令。
    • シフト命令
      2進数の値を、左または右へずらす命令。
      • 左シフト
        nビット左シフトすると、値が2^n倍となる。
      • 右シフト
        nビット右シフトすると、値が2^-n倍となる。
    • 論理演算命令
      論理演算を行う命令。2進数への基数変換が必要。
      • 論理和(OR)
        どちらか一方でも1なら結果は1となる。
      • 論理積(AND)
        どちらとも1なら結果は1となる。
      • 排他的論理和(XOR)
        どちらか一方だけが1なら結果は1となる。

ネットワークセキュリティ

  • プロトコル
    ネットワーク通信に必要な約束事と取り決めのこと。通信元と宛先の双方のデータ形式と順序を決める。
    • セキュアプロトコル
      通信データの暗号化と改ざんを検知するためのプロトコル。
      • SSL/TLS
        OSI基本参照モデルのトランスポート層で暗号化などを行う。
        使うための準備と設定が手軽で、WebブラウザとWebサーバ間の通信でよく使われる。
      • IPsec
        OSI基本参照モデルのネットワーク層で暗号化などを行う。
        様々な形式に対応しているため、汎用性は高いが、使うための準備や設定が難しい。
    • Webプロトコル
      Webサイトの閲覧などで使われるプロトコル。
      • HTTP
        WebブラウザとWebサイトの間で、通信データをやり取りするためのプロトコル。
      • HTTPS
        TLSより暗号化したHTTP通信。TLSとHTTPの組み合わせ。
    • メールのプロトコル
      電子メールの送受信に使用するプロトコル。
      • POP3
        メール受信用のプロトコル。メールサーバに届いたメールをダウンロードする。
        ※未読既読の状態を、ダウンロードした端末で管理する。
      • IMAP
        メール受信用のプロトコル。メールサーバに届いたメールをそのまま読む方式。
        ※未読既読の状態を、メールサーバで管理する。
      • SMTP
        メール送信用のプロトコル。
    • 遠隔操作のプロトコル
      離れた場所からコンピュータを遠隔操作するために使うプロトコル。
      • Telnet
        遠隔地のコンピュータを遠隔操作するためのプロトコル。
      • SSH
        遠隔地のコンピュータを安全に遠隔操作するためのセキュアプロトコル。