IPA SC(情報処理安全確保支援士試験)勉強(1)

## 目的
過去2回落ちているSC。また申し込んでしまったが勉強とにかく面白くない。ので勉強をしている記事を書くことで何とか向き合おうとするための勉強用ノート。

とりあえず家にあったこれに沿ってやっていく。なお家にあったのは2021年版。2024年版を買っていない辺りにやる気のなさが表れている。

https://www.amazon.co.jp/2024-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E5%AE%89%E5%85%A8%E7%A2%BA%E4%BF%9D%E6%94%AF%E6%8F%B4%E5%A3%AB%E3%80%8C%E5%B0%82%E9%96%80%E7%9F%A5%E8%AD%98%EF%BC%8B%E5%8D%88%E5%BE%8C%E5%95%8F%E9%A1%8C%E3%80%8D%E3%81%AE%E9%87%8D%E7%82%B9%E5%AF%BE%E7%AD%96-%E4%B8%89%E5%A5%BD%E5%BA%B7%E4%B9%8B/dp/4865753176/ref=pd_lpo_sccl_1/356-7197981-9101905?pd_rd_w=tXLtr&content-id=amzn1.sym.855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_p=855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_r=B1QP83MW785GM40MVPWW&pd_rd_wg=pPWGE&pd_rd_r=e6a281d7-6536-46b3-bca0-ee96266216a2&pd_rd_i=4865753176&psc=1

## 勉強開始

### 認証とアクセスコントロール
最初は認証の話。何回聞いても雰囲気でしか覚えられない・・・。

1. アクセスコントロールの種類
    |種類|説明|
    |--|--|
    |任意アクセス制御|DAC(Discretionary Access Control) リソースオーナーがそれぞれ自分で制御|
    |強制アクセス制御|MAC(Mandatory Access Control) 管理者による一括制御|
    |ロールベースアクセス制御|RBAC(Roll-Based Access Controle) AWSのIAM Roleみたいなやつ|
    
    :::note warn
    Discretionary とか Mandatory とか知らない単語やめてほしい。

1. 最小権限の原則
    これは普段仕事していると普通の考え方なので分かる

1. パスワードの暗号化
   見たことあるよく分からない単語を改めて調べた。
   - TELNETとSSHはどっちもリモート接続プロトコルの事で、SSHだと暗号化した通信ができる。
   - FTPはファイル転送プロトコル。SSHを利用して暗号化できる方はSFTPという。SSL/TLSを利用して暗号化するFTPSというのもある。
   - MD5はハッシュ関数。脆弱性があるので使われなくなっている

1. チャレンジレスポンス方式
    ```mermaid
    sequenceDiagram
        participant client
        participant server

        client ->> server: アクセス要求
        server ->> server: チャレンジコードを生成（例:1234）
        server ->> client: チャレンジコード（例:1234）
        client ->> client: パスワード（password）とチャレンジコードを組み合わせて値を生成(password1234)
        client ->> server: 生成した値（password1234）
        server ->> server: パスワード（password）とチャレンジコードを組み合わせて値を生成(password1234)
        server ->> server: clientから受け取った値と自身が生成した値を比較
        server ->> client: 認証結果
    ```

    - パスワードを直接通信に流さない事でセキュリティ向上
    - チャレンジは毎回変わるので盗まれても使い回せない

1. 無線LAN
    IEEE802.1X認証という認証の規格がある。認証を突破しないとLANに接続できなくなる。
    オーセンティケータと呼ばれる認証結果を通信に反映させる機器とサプリカントと呼ばれる認証クライアントと認証サーバの3つから成る。
    ```mermaid
    graph LR
      S["User(サプリカント)"]--> |EAPOL| O["アクセスポイント(オーセンティケータ)"]
      O-->|RADIUS| server[認証サーバ]
    ```

    - EAPOL(Extensible Authentication Protocol over LAN)
    EAPのメッセージを送信するための仕組み。EAPはどの認証方式を用いるかを指定するプロトコルである。
        - EAP-MD5
        ハッシュ関数にMD5を採用したチャレンジレスポンス方式の認証。前述の通りMD5に脆弱性があるので危険
        - PEAP
        認証サーバをサーバ証明書で担保＆ユーザIDパスワードの通信をSSL/TLSによって確保
        - EAP-TLS
        認証サーバをサーバ証明書で担保＆クライアントをクライアント証明書で認証。通信にはTLSを使用
        - EAP-TTLS
        方式としてはPEAPと同じ。なんか内部のプロトコルがちょっと違うらしい。EAP-TTLSっていうのにEAPじゃないんだ？？
    - RADIUS(Remote Authentication Dial In User Service)
    Redisとは違う。
    認証プロトコル。図でRADIUSって書いてるのはRADIUS用パケットくらいの意味か

1. シングルサインオン
    - SAML(Security Assertion Markup Language)
    XMLで記載する認証情報の標準規格。
    ```mermaid
    sequenceDiagram
        actor user
        participant service
        participant IdP

        user ->> service: アクセスしたい
        service ->> user: 許可取ってこい（IdPへのリンク）
        user ->> IdP: ID/Password
        IdP ->> IdP: 認証
        IdP ->> user: 認証token
        user ->> service: tokenもらってきた
        service ->> user: OK!
    ```
    - IDフェデレーション
        ```mermaid
        sequenceDiagram
            actor user
            participant service
            participant IdP as GitHub
    
            user ->> service: アクセスしたい
            service ->> user: ログインしろ（他サービスでもいいよ）
            user ->> service: GitHub連携で頼む
            service ->> user: http://github.com
            user ->> IdP: ユーザーID/password
            IdP ->> service: 認証token
            service ->> IdP: 利用するための情報くれ（認証token）
            IdP ->> service: OK（あいつは正しいUser）
            service ->> user: OK!
        ```

## 勉強終了
つかれた。SSOとか具体的な認証をアプリケーションに組み込んでみないとイメージしづらい。

## 次回
シングルサインオンの続き