プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • セキュリティ
  • 【セキュリティ】「暗号スイート」、「SSLハンドシェイク」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【セキュリティ】「暗号スイート」、「SSLハンドシェイク」について

12.29

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

暗号スイートとは?

SSL通信をする際に、サーバークライアントで利用可能な鍵交換の方法、サーバー認証方法、MACアルゴリズムをまとめたものです。サーバー、クライアント間で暗号スイートが一致しない場合はSSL/TLS通信は失敗します。

主な暗号スイート

暗号スイート名 鍵交換方法 認証方法 暗号方法 MAC
NULL-SHA RSA RSA なし SHA-1
RC4-MD5 RSA RSA RC4(128) SHA-1
ADH-DES-CBC3-SHA DH なし 3DES(112) SHA-1
DH-DSS-DES-CBC3-SHA DH DSS 3DES(112) SHA-1
DH-RSA-DES-CBC3-SHA DH RSA 3DES(112) SHA-1
AES128-SHA RSA RSA AES(128) SHA-1
AES256-SHA RSA RSA AES(256) SHA-1
DHE-RSA-AES128-SHA256 DH RSA AES(128) SHA-256
CAMELLIA128-SHA RSA RSA CAMELLIA(128) SHA-1

暗号スイート名

鍵交換、サーバー認証、暗号化方法、MACアルゴリズムなどを一意に特定する名称

鍵交換方法

SSL/TLSのハンドシェイクの際の暗号化の鍵交換アルゴリズム

認証方法

SSL/TLSにおいて認証を行うアルゴリズム

暗号化方法

暗号化通信に使用する共通鍵アルゴリズム

MACアルゴリズム

SSL/TLSの暗号化通信時に使用するメッセージ認証コード(MACアルゴリズム)。

SSLハンドシェイクの流れ

SSL/TLSはTCP利用を始める前に3ウェイハンドシェイク(SYN→SYN/ACK→ACK)を行ってTCPセッションを確立します。その後、上述したSSLハンドシェイクを行います。

大まかな流れ

暗号スイートの提示

クライアントは、自身がサポートしているSSL/TLSバージョンや、暗号スイートをサーバー側に提示します。自分はこのアルゴリズムなら使えますとサーバーがわに提示するわけですね。

通信相手の証明

クライアントは、サーバーからサーバー証明書と公開鍵を受け取り、受け取ったサーバー証明書を検証(サーバー証明書の階層をたどり、ブラウザに登録されているルート証明書で復号、MD比較する。)し、本物のサーバーであることを確認します。

仮に、階層をたどるうちに信頼する証明書に辿り着かなかった場合は認証に失敗します。

もし、本物であることが確認できたらクライアントは共通鍵を生成します。共通鍵をサーバーから送られてきた公開鍵で暗号化します。

共通鍵の交換

実際には共通鍵そのものではなく、共通鍵の素材(プリマスターシークレット)を暗号化して交換します。サーバー側は送られたきた暗号化ファイルを共通鍵を秘密鍵で複合して、共通鍵を取り出します。

これで、クライアント、サーバーともに両方に安全な共通鍵を持つことができます。

SSL/TLS通信開始

SSL/TLSによる暗号化通信を共通鍵暗号方式を使って行います。その際にMACを使って改ざんがないか確認します。

最終確認

SSL/TLSによる暗号化通信を暗号化方式(AES、DES、3DESなど)を宣言してSSLハンドシェイクを終了します。

スポンサーリンク
  • 2021 12.29
  • miyabisan2
  • コメントを書く
  • セキュリティ
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2022 01.10

    【セキュリティ】「脆弱性情報の収集」について

  2. 2019 11.24

    【セキュリティ】CSRF(クロスサイトリクエストフォージェリ)とは?

  3. 2018 03.31

    【Web開発】画面間の情報の受け渡し方法について(hiddenパラメータ、セッション変数、クッキー)

  4. 2019 11.30

    【Web開発】ユーザー管理機能の設計や実装、認証設計の種類

  5. 2021 12.28

    【セキュリティ】「メッセージ認証コード(MAC)」、「電子署名との違い」について

  6. 2018 04.07

    【Webセキュリティ】Javaサーブレットで、XSSを体験してみる。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【セキュリティ】証明書の基本、サーバー証明書発行までの…

【ネットワーク】「NATタイプ」とは?

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー