SQLインジェクション

SQL Injectionはセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることによりデータベースシステムを不正に操作する攻撃方法

$ mysql -u root -p
mysql> show databases;
mysql> use test
CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT,
name varchar(10),
PRIMARY KEY (id)
);

mysql> INSERT INTO users(name) VALUES
(‘フグ田サザエ’),
(‘フグ田マスオ’),
(‘磯野波平’),
(‘磯野フネ’),
(‘磯野カツオ’),
(‘磯野ワカメ’),
(‘フグ田タラオ’),
(‘タマ’)
;
mysql> select * from users;

$dsn = "mysql:dbname=test;host=localhost";
$user = "hoge";
$password = "fuga"; 

try {
	$records = [];
	$id = 1;

	$pdo = new PDO(
		$dsn, $user, $password
	);
	$prepare = $pdo->prepare('SELECT * FROM users WHERE id = '.$id.';');
	$prepare->execute();
	$records = $prepare->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
	echo $e->getMessage();
}

var_dump($records);

$ php index.php
array(1) {
[0]=>
array(2) {
[“id”]=>
string(1) “1”
[“name”]=>
string(18) “フグ田サザエ”
}
}

ここで、”0 OR TRUE; –“とすると、全件表示される

	$records = [];
	$id = '0 OR TRUE; --';

	$pdo = new PDO(
		$dsn, $user, $password
	);
	$prepare = $pdo->prepare('SELECT * FROM users WHERE id = '.$id.';');
	$prepare->execute();
	$records = $prepare->fetchAll(PDO::FETCH_ASSOC);

テーブル名がわかった場合は、”0 OR TRUE; DELETE FROM users; –“でテーブルのレコードが全て削除されてしまう

	$records = [];
	$id = '0 OR TRUE; DELETE FROM users; --';

	$pdo = new PDO(
		$dsn, $user, $password
	);
	$prepare = $pdo->prepare('SELECT * FROM users WHERE id = '.$id.';');
	$prepare->execute();
	$records = $prepare->fetchAll(PDO::FETCH_ASSOC);

mysql> select * from users;
Empty set (0.00 sec)

### 対策
PDOの場合はクエリ実行前にbindValueでバインドする

	$prepare = $pdo->prepare('SELECT * FROM users WHERE id = :id;');
	$prepare->bindValue(':id', $id, PDO::PARAM_INT);
	$prepare->execute();

mysql> select * from users;
+—-+——————–+
| id | name |
+—-+——————–+
| 9 | フグ田サザエ |
| 10 | フグ田マスオ |
| 11 | 磯野波平 |
| 12 | 磯野フネ |
| 13 | 磯野カツオ |
| 14 | 磯野ワカメ |
| 15 | フグ田タラオ |
| 16 | タマ |
+—-+——————–+
8 rows in set (0.00 sec)

“0 OR TRUE; –“でテストするのが良さそう

パスワードマネージャーの機能

パスワードマネージャーの便利機能
– パスワード保存機能: パスワード管理
– パスワード自動生成: パスワードの強化
– ワンタイムパスワードの発行
– ログイン操作の入力補助
– エクスポートとインポート
– 端末間の同期: PC、スマホで利用できる

e.g.
RoboForm: https://www.roboform.com/jp
L Chrome Extensionで管理 
Bitwarden: https://bitwarden.com/ja-JP/
True Key: https://www.truekey.com/ja
L McAfeeが運営している
1Password: https://1password.com/jp
Keeper: https://www.keepersecurity.com/ja_JP
パスメモ(日本システムウエア株式会社が運営)

データ漏洩絵事件で公開されたパスワードを管理するデータベース
Have I Been Pwned (HIBP)
https://haveibeenpwned.com/

パスワード生成よりもパスワード保存、一括管理が機能的に必要そう

一方向性ハッシュ関数 MD5, SHA, RIPEMD160

一方向性ハッシュ関数は任意の長さのデータを固定長のビット文字列に変換することのアルゴリズム
入力を受け取ったら、不可逆的に変換して出力する一方通行のプロセス
出力から入力を復元することは不可能

アルゴリズムのうちの2つがMD5とSHA
MD5は暗号的に壊れており、衝突の原因になると考えられている
一方SHAはNIST(National Institute of Standards and Technology)が開発した暗号ハッシュ関数のファミリーをさす。SHAにはSHA256やSHA512などのバージョンがあり、全体としてMD5よりも安全性が高いとされている。

### MD5とは
MD5とはMessage-Digest Algorithmの略。128ビットのハッシュ値を生成することができる。
多くの脆弱性を引き起こしたが、データの完全性を検証するためのチェックサムとして使用することは可能
また、パーティション分割されたデータベースから特定の鍵のパーティションを見つけるなど、非暗号的なタスクにも適している

$text = "It's sunny today.";
echo md5($text);

### SHAとは
SHAとは、Secure Hash Algorithmの略。
SHA-0: 160ビットのハッシュ関数オリジナルバージョン
SHA-1: 160ビットのハッシュ関数 ※2010年以降は使用されていない
SHA-2: ブロックサイズの異なる2つの等価ハッシュ関数から構成される
SHA-256: 32ビットワード
SHA-523: 64ビットワード

$text = "It's sunny today.";
echo hash('sha256', $text);

### RIPEMD
入力データのサイズに関わらず、160ビットのハッシュ値を生成する。SHA-256より小さいためデータサイズを節約できる
データとkeyを渡す

$text = "It's sunny today.";
echo hash_hmac('ripemd160', $text, 'secret');

ランダムな数値・文字列

echo '乱数1回目:'.rand().'¥n';
echo '乱数2回目:'.rand().'¥n';
echo '乱数3回目:'.rand().'¥n';

乱数1回目:897666718¥n乱数2回目:2106848809¥n乱数3回目:1545861839¥n

範囲指定した乱数

$min = 3;
$max = 10;

echo '乱数1回目:'.rand($min, $max).'¥n';
echo '乱数2回目:'.rand($min, $max).'¥n';
echo '乱数3回目:'.rand($min, $max).'¥n';

mt_rand関数はメルセンヌ・ツイスタと呼ばれる擬似乱数列生成器を使用しており高速に乱数を生成できる

echo mt_rand().'<br>';
echo mt_rand().'<br>';
echo mt_rand().'<br>';
$min = 0;
$max = 100;

echo mt_rand($min, $max).'<br>';
echo mt_rand($min, $max).'<br>';
echo mt_rand($min, $max).'<br>';

ランダムな文字列を生成する
ASCIIコードで指定された引数から文字を返すchr関数を併用して文字列を生成する

$rand_str = chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90));

echo $rand_str;

配列の要素をランダムに取得

$fruits = ['apple'=>'100円', 'orange'=>'80円', 'melon'=>'300円', 'banana'=>'120円', 'pineapple'=>'350円'];

$rand_key = array_rand($fruits, 3);

print_r($rand_key);

ランダムな英数字の作成

$str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPUQRSTUVWXYZ';
$str_r = substr(str_shuffle($str), 0, 10);

echo $str_r;

uniqid関数を使用したランダム文字列

$str_r = uniqid(rand(), true);
echo $str_r;

md5関数は32文字の16進数からなるハッシュを取得する

$str_r = md5(uniqid(rand(), true));
echo $str_r;

OpenSSLを用いたデジタル署名

デジタル署名には2つの方法がある
– メッセージに署名するケース
– メッセージのハッシュ値に署名するケース

1. テスト用ファイルの作成
$ echo foobar > foo.txt

2. dsaパラメータの作成(Digital signature algorithm)
DSAパラメータを1セット作成し、PEMファイルに出力する。1024ビット長の素数を利用
$ openssl dsaparam 1024 -in /dev/random -out dsa_param.pem

3. プライベート鍵の作成
$ openssl gendsa dsa_param.pem -out dsa_private.pem

4. 公開鍵の作成
DSAプライベート鍵からDSA公開鍵を作成
$ openssl dsa -in dsa_private.pem -pubout -out dsa_public.pem

5. ダイジェストの作成
テキスト用ファイル(foo.txt)からダイジェストを作成する
$ openssl dgst -sha1 foo.txt | awk ‘{print $2}’ > foo.txt.sha1.sum

6. ダイジェストの署名
DSA秘密鍵を用いて、ダイジェストファイル(foo.txt.sha1sum)からデジタル署名を作成する
$ openssl dgst -dss1 -sign dsa_private.pem -out foo.txt.sig foo.txt.sha1sum

7.ダイジェストの検証
$ openssl dgst -dss1 -sign dsa_private.pem -out foo.txt.sig foo.txt.sha1sum

OpenSSLで秘密鍵、公開鍵の作成

RSAを用いて公開鍵暗号方式で暗号化、複合化を行う

1. 秘密鍵の作成
$ openssl genrsa -out private.pem 2048

※暗号化した秘密鍵の作成
$ openssl genrsa -out private_secure.pem -aes256 2048

2. 公開鍵の作成
$ openssl rsa -in private.pem -pubout -out public.pem

3. ファイルの準備
$ echo ‘hoge’ > file.txt

4. 公開鍵で暗号化
$ openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.encrypted
$ hexdump file.encrypted

5. 秘密鍵で復号化
$ openssl rsautl -decrypt -inkey private.pem -in file.encrypted -out file.decrypted
$ cat file.decrypted
hoge

OpenSSLで共通鍵作成

1. 暗号化するデータの用意
$ echo hoge > file.txt

2. 共通鍵の作成
$ openssl rand -base64 32 > rand.txt
※-out rand.txtだとExtra arguments given.でエラーになる

3. データの暗号化
$ openssl enc -e -aes128 -kfile rand.txt -in file.txt -out file.aes128_64 -base64
$ cat file.aes128_64
U2FsdGVkX19QJLESvS5Z/08k+CWpOjXqe9GA08NuCzE=

4. データの複合化
$ openssl enc -d -aes128 -kfile rand.txt -in file.aes128_64 -base64
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
hoge

### 初期ベクトルを指定する方法
-iv: 初期ベクトル
-K: 秘密鍵
$ mkdir src
$ echo hello > src/file.txt
$ openssl enc -aes-128-cbc -in src/file.txt -out src/file.txt.enc -K 1234567890abcdef0123456789abcdef -iv 00000000000000000000000000000000
$ openssl enc -d -aes-128-cbc -in src/file.txt.enc -out src/file.txt.decrypted -K 1234567890abcdef0123456789abcdef -iv 00000000000000000000000000000000
※AES-128の秘密鍵と初期ベクトルは32桁の128bit

HTTPとHTTPSの違い

## HTTPとは
・HTTP(Hyptertext Transfer Protocol)はWebサーバとWebブラウザの間でWeb情報をやり取りするためのプロトコル(通信規則)
・多くの場合、HTTPはTCPと組み合わせて使い、UDPと組み合わせるケースは稀。サーバがHTTP通信を受け取るポート番号は通常80番。HTTPプロキシ(高パフォーマンスのコンテンツフィルタなど)で特殊な用途で利用する場合は、80番ポート以外を利用する

## HTTPとHTTPSの違い
HTTPとHTTPSの違いは通信が暗号化されていないか暗号化されているかの違いで、HTTPSは暗号化されている。HTTPS(Hypertext Transfer Protocol Secure)は、HTTPで安全に通信を行うための仕組み。HTTPSのポート番号は443番が割り当てられている。
HTTPSは特別なプロトコルが定められているわけではなく、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)と呼ばれる安全な接続を使って、その上でHTTPによる通信を行う。そのため、HTTPの持つシンプルで汎用性の高い特性はそのまま活かされている。
HTTPSは盗聴することができず、改ざんを検知することもできる。

## SSLサーバ証明書とHTTP暗号化通信
HTTPSによる暗号化通信はSSLサーバ証明書をサーバにインストールして実現できる
認証レベルにもDV認証、OV認証、EV認証と別れている

## httpsのページが表示されるまでの流れ
httpsではじまるURLにウェブブラウザがアクセスしようとすると、クライアント(ブラウザ)とサーバ間で以下のようなネゴシエーションが行われる
1. ブラウザはサーバにhttpsリクエストを送信
2. ブラウザとサーバで利用する暗号方式を決定
3. サーバからブラウザにSSLサーバ証明書と公開鍵を送付
4. ブラウザはプリマスターシークレットを送信し、ブラウザとサーバで共通鍵を生成
5. ブラウザとサーバは共通鍵を使用して、データを暗号化して送受信する

## 暗号アルゴリズムの決定メカニズム
大抵の場合、クライアントとサーバは複数の暗号アルゴリズムを使用できる。そのため、通信を開始する前に、使用するアルゴリズムを決定しなければならない
1. クライアントはサーバにSSL通信をリクエストする際に、サーバに利用可能な暗号アルゴリズムを送付する
2. サーバは使用するアルゴリズムを選択し決定する
3. サーバはSSLサーバ証明書と利用する暗号アルゴリズムをクライアントに送信
4. クライアントはサーバから受信した情報に基づいてデータを暗号化

## アルゴリズムの選択
2048ビット長の鍵が主流
SSL通信で使用されるアルゴリズムは公開されている。暗号データは暗号化と復号で使用される鍵で守られている。アルゴリズムが解っているため、鍵が重要。鍵長を長くすることで暗号は解読されにくくなる。

$ openssl ciphers -v ‘HIGH’
TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES256-CCM8 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM8(256) Mac=AEAD
ECDHE-ECDSA-AES256-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(256) Mac=AEAD
DHE-RSA-AES256-CCM8 TLSv1.2 Kx=DH Au=RSA Enc=AESCCM8(256) Mac=AEAD
DHE-RSA-AES256-CCM TLSv1.2 Kx=DH Au=RSA Enc=AESCCM(256) Mac=AEAD
ECDHE-ECDSA-ARIA256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=ARIAGCM(256) Mac=AEAD
ECDHE-ARIA256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=ARIAGCM(256) Mac=AEAD
DHE-DSS-ARIA256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=ARIAGCM(256) Mac=AEAD
DHE-RSA-ARIA256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=ARIAGCM(256) Mac=AEAD
ADH-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=None Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-CCM8 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM8(128) Mac=AEAD
ECDHE-ECDSA-AES128-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(128) Mac=AEAD
DHE-RSA-AES128-CCM8 TLSv1.2 Kx=DH Au=RSA Enc=AESCCM8(128) Mac=AEAD
DHE-RSA-AES128-CCM TLSv1.2 Kx=DH Au=RSA Enc=AESCCM(128) Mac=AEAD
ECDHE-ECDSA-ARIA128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=ARIAGCM(128) Mac=AEAD
ECDHE-ARIA128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=ARIAGCM(128) Mac=AEAD
DHE-DSS-ARIA128-GCM-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=ARIAGCM(128) Mac=AEAD
DHE-RSA-ARIA128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=ARIAGCM(128) Mac=AEAD
ADH-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=None Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256
ECDHE-ECDSA-CAMELLIA256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=Camellia(256) Mac=SHA384
ECDHE-RSA-CAMELLIA256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=Camellia(256) Mac=SHA384
DHE-RSA-CAMELLIA256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA256
DHE-DSS-CAMELLIA256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA256
ADH-AES256-SHA256 TLSv1.2 Kx=DH Au=None Enc=AES(256) Mac=SHA256
ADH-CAMELLIA256-SHA256 TLSv1.2 Kx=DH Au=None Enc=Camellia(256) Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
DHE-DSS-AES128-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-CAMELLIA128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=Camellia(128) Mac=SHA256
ECDHE-RSA-CAMELLIA128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=Camellia(128) Mac=SHA256
DHE-RSA-CAMELLIA128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA256
DHE-DSS-CAMELLIA128-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=Camellia(128) Mac=SHA256
ADH-AES128-SHA256 TLSv1.2 Kx=DH Au=None Enc=AES(128) Mac=SHA256
ADH-CAMELLIA128-SHA256 TLSv1.2 Kx=DH Au=None Enc=Camellia(128) Mac=SHA256
ECDHE-ECDSA-AES256-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES256-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA1
AECDH-AES256-SHA TLSv1 Kx=ECDH Au=None Enc=AES(256) Mac=SHA1
ADH-AES256-SHA SSLv3 Kx=DH Au=None Enc=AES(256) Mac=SHA1
ADH-CAMELLIA256-SHA SSLv3 Kx=DH Au=None Enc=Camellia(256) Mac=SHA1
ECDHE-ECDSA-AES128-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(128) Mac=SHA1
AECDH-AES128-SHA TLSv1 Kx=ECDH Au=None Enc=AES(128) Mac=SHA1
ADH-AES128-SHA SSLv3 Kx=DH Au=None Enc=AES(128) Mac=SHA1
ADH-CAMELLIA128-SHA SSLv3 Kx=DH Au=None Enc=Camellia(128) Mac=SHA1
RSA-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=RSAPSK Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(256) Mac=AEAD
RSA-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=RSAPSK Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-AES256-CCM8 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESCCM8(256) Mac=AEAD
DHE-PSK-AES256-CCM TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESCCM(256) Mac=AEAD
RSA-PSK-ARIA256-GCM-SHA384 TLSv1.2 Kx=RSAPSK Au=RSA Enc=ARIAGCM(256) Mac=AEAD
DHE-PSK-ARIA256-GCM-SHA384 TLSv1.2 Kx=DHEPSK Au=PSK Enc=ARIAGCM(256) Mac=AEAD
AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
AES256-CCM8 TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM8(256) Mac=AEAD
AES256-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(256) Mac=AEAD
ARIA256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=ARIAGCM(256) Mac=AEAD
PSK-AES256-GCM-SHA384 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(256) Mac=AEAD
PSK-CHACHA20-POLY1305 TLSv1.2 Kx=PSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
PSK-AES256-CCM8 TLSv1.2 Kx=PSK Au=PSK Enc=AESCCM8(256) Mac=AEAD
PSK-AES256-CCM TLSv1.2 Kx=PSK Au=PSK Enc=AESCCM(256) Mac=AEAD
PSK-ARIA256-GCM-SHA384 TLSv1.2 Kx=PSK Au=PSK Enc=ARIAGCM(256) Mac=AEAD
RSA-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=RSAPSK Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(128) Mac=AEAD
DHE-PSK-AES128-CCM8 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESCCM8(128) Mac=AEAD
DHE-PSK-AES128-CCM TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESCCM(128) Mac=AEAD
RSA-PSK-ARIA128-GCM-SHA256 TLSv1.2 Kx=RSAPSK Au=RSA Enc=ARIAGCM(128) Mac=AEAD
DHE-PSK-ARIA128-GCM-SHA256 TLSv1.2 Kx=DHEPSK Au=PSK Enc=ARIAGCM(128) Mac=AEAD
AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
AES128-CCM8 TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM8(128) Mac=AEAD
AES128-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(128) Mac=AEAD
ARIA128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=ARIAGCM(128) Mac=AEAD
PSK-AES128-GCM-SHA256 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(128) Mac=AEAD
PSK-AES128-CCM8 TLSv1.2 Kx=PSK Au=PSK Enc=AESCCM8(128) Mac=AEAD
PSK-AES128-CCM TLSv1.2 Kx=PSK Au=PSK Enc=AESCCM(128) Mac=AEAD
PSK-ARIA128-GCM-SHA256 TLSv1.2 Kx=PSK Au=PSK Enc=ARIAGCM(128) Mac=AEAD
AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
CAMELLIA256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=Camellia(256) Mac=SHA256
AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
CAMELLIA128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA256
ECDHE-PSK-AES256-CBC-SHA384 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(256) Mac=SHA384
ECDHE-PSK-AES256-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(256) Mac=SHA1
SRP-DSS-AES-256-CBC-SHA SSLv3 Kx=SRP Au=DSS Enc=AES(256) Mac=SHA1
SRP-RSA-AES-256-CBC-SHA SSLv3 Kx=SRP Au=RSA Enc=AES(256) Mac=SHA1
SRP-AES-256-CBC-SHA SSLv3 Kx=SRP Au=SRP Enc=AES(256) Mac=SHA1
RSA-PSK-AES256-CBC-SHA384 TLSv1 Kx=RSAPSK Au=RSA Enc=AES(256) Mac=SHA384
DHE-PSK-AES256-CBC-SHA384 TLSv1 Kx=DHEPSK Au=PSK Enc=AES(256) Mac=SHA384
RSA-PSK-AES256-CBC-SHA SSLv3 Kx=RSAPSK Au=RSA Enc=AES(256) Mac=SHA1
DHE-PSK-AES256-CBC-SHA SSLv3 Kx=DHEPSK Au=PSK Enc=AES(256) Mac=SHA1
ECDHE-PSK-CAMELLIA256-SHA384 TLSv1 Kx=ECDHEPSK Au=PSK Enc=Camellia(256) Mac=SHA384
RSA-PSK-CAMELLIA256-SHA384 TLSv1 Kx=RSAPSK Au=RSA Enc=Camellia(256) Mac=SHA384
DHE-PSK-CAMELLIA256-SHA384 TLSv1 Kx=DHEPSK Au=PSK Enc=Camellia(256) Mac=SHA384
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
CAMELLIA256-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(256) Mac=SHA1
PSK-AES256-CBC-SHA384 TLSv1 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA384
PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1
PSK-CAMELLIA256-SHA384 TLSv1 Kx=PSK Au=PSK Enc=Camellia(256) Mac=SHA384
ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA256
ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA1
SRP-DSS-AES-128-CBC-SHA SSLv3 Kx=SRP Au=DSS Enc=AES(128) Mac=SHA1
SRP-RSA-AES-128-CBC-SHA SSLv3 Kx=SRP Au=RSA Enc=AES(128) Mac=SHA1
SRP-AES-128-CBC-SHA SSLv3 Kx=SRP Au=SRP Enc=AES(128) Mac=SHA1
RSA-PSK-AES128-CBC-SHA256 TLSv1 Kx=RSAPSK Au=RSA Enc=AES(128) Mac=SHA256
DHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=DHEPSK Au=PSK Enc=AES(128) Mac=SHA256
RSA-PSK-AES128-CBC-SHA SSLv3 Kx=RSAPSK Au=RSA Enc=AES(128) Mac=SHA1
DHE-PSK-AES128-CBC-SHA SSLv3 Kx=DHEPSK Au=PSK Enc=AES(128) Mac=SHA1
ECDHE-PSK-CAMELLIA128-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=Camellia(128) Mac=SHA256
RSA-PSK-CAMELLIA128-SHA256 TLSv1 Kx=RSAPSK Au=RSA Enc=Camellia(128) Mac=SHA256
DHE-PSK-CAMELLIA128-SHA256 TLSv1 Kx=DHEPSK Au=PSK Enc=Camellia(128) Mac=SHA256
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
CAMELLIA128-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA256 TLSv1 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA256
PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1
PSK-CAMELLIA128-SHA256 TLSv1 Kx=PSK Au=PSK Enc=Camellia(128) Mac=SHA256

Cookie規制とは

## Cookieとは
Cookieとはサイトに訪れたユーザ情報を一時的にユーザのブラウザに保存する仕組み
サイト分析、広告配信などのトラッキング技術に利用されるほか、ID、パスワード、メールアドレス、訪問回数などユーザ情報として保存するためにも活用される

## 企業視点でのCookie利用例
– 自社サイトを訪問した人にCookieを付与し、その対象者に向けてリターゲティング広告を配信
– ユーザが最終的にコンバージョンに至るまでの過程でどのような行動履歴を取ったのかアトリビューション計測をする

### 1st party cookieと3rd party cookie
1st Party Cookie: サイトの運営者が発行しているCookie
3rd party cookie: 第三者が発行しているCookie
=> 複数のサイトを横断して閲覧した履歴を追跡していくために使われており、その情報を様々なデータと紐付けて活用されている。
=> プライバシーの観点で問題視されている
=> 日本でも改正個人情報保護法が施行され、Cookieなどの個人情報を第三者に提供し個人情報紐付けを行う場合は本人の同意が必要になった

### Apple社の対応
Safari内で3rd party cookieを利用したユーザの行動データの収集を規制、完全にブロックされている
=> リターゲティング広告が利用できない
=> コンバージョン・アトリビューション計測精度の低下(最初の訪問から数日経ってからのコンバージョンはCookie情報がなくなってしまう)

### Google社
3rd party cookieを利用したユーザの行動データの収集を2024年後半に段階的に廃止する

ストレージの暗号化

ストレージ暗号化とは、ストレージ内部のデータを暗号化することで、正しい鍵を持っているユーザ以外はデータを利用できないようにする仕組みのこと
ストレージを暗号化しておくことで、不正アクセスの被害にあった際や、ストレージを盗聴されたり紛失したりした際の情報漏洩を防ぐことができる 
ただし、鍵の情報が漏洩すると暗号化しても情報が漏洩してしまう。また、マルウェア感染などの脅威は防げない

1. 暗号化ソフトを利用する
ESET Endpoint Encryption: 有名なESETの暗号化ソフト
NonCopy2: 純国産ソフトウェア
セキュリティ・ウェアハウス: windowsと似た操作感で使いやすさが魅力の暗号化ソフト

2. 標準搭載機能を使う
Windows10Proなどに標準機能として入っているBitLockerが有名

3. 暗号化機能のあるストレージを使う
クラウドストレージでも暗号化機能を備えたサービスは多い

また、ストレージの暗号化だけでなく、マルウェア対策、多要素認証、バックアップなどの対策も大切