Note to Self

自分用のメモ置き場

ハッシュ関数とは

ハッシュ関数とは

Software Design 2017年6・7月号 ハッシュ関数を使いこなしていますか? の記事を読んで、 自分なりにまとめてみました

ハッシュ関数が持つべき特性

1. 同じデータを入力すると必ず同じハッシュ値を出力する  
2. どんなデータを入力しても決まった長さのハッシュ値を出力する  
3. 別のデータに対してはほぼ別のハッシュ値を出力する  
4. ハッシュ値から元のデータを算出することはほぼできない

ハッシュ関数の利用例

1. AとCの特性を活かしたファイルの同一性チェック
2. BとCの特性を活かした推測しにくいURLの生成
3. AとDの特性を活かしたログインパスワードの保存 

注意点

  • レインボーテーブルを使用すると簡単に割り出されてしまうため、ハッシュ関数を使用する際は、 必ず入力データにソルトを付加し、衝突の可能性を考慮に入れる(ストレッチングすることが望ましい)
- ソルト
ハッシュ値を計算する前にパスワードの前後に付け加える短い文字列 
 
- ストレッチング
ハッシュ値の計算を何回も繰り返すこと  
  • ソルトはユーザごとに異なる文字列を付与すべき
    例)userId + システム一意のランダム値

  • パスワードのハッシュ化などはできるだけ既存の仕組みを使うのが望ましい(巨人の肩の上に立つ)

  • ハッシュと似た概念として、暗号化、難読化、エンコードがあるがすべて別の概念である

- 暗号化
暗号化は復号して元のデータに戻すことを前提としている
元のデータが長くなれば、暗号文も長くなる  
「暗号化」に対する言葉は「復号化」ではなく、「復号」  
「復号」は動詞に対し、「暗号」は名詞なので「化」を付けて動詞化している

- 難読化  
プログラムのソースコードを人間が読みにくいように変換すること
難読化されたソースコードはそのまま実行される

- エンコード  
特定のアルゴリズムでデータを別の形に変換すること
特定の文字列しか通せない経路に任意のデータを通す目的で使われる
変換されたデータはデコードすることで元のデータに戻すことができる
元のデータが長くなれば、エンコードされたデータも長くなる
暗号化と同様に、元のデータに戻すことを前提としているが、アルゴリズムを
知っていればデコードすることが可能なため、暗号文のつもりで使用してはいけない

CentOS 6にGitをソースからコンパイルしてインストールする

-- 作業場所に移動  
cd /usr/local/src

-- 以下は場合によっては必要  
yum remove git  
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker

-- ソースのダウンロード  
wget https://www.kernel.org/pub/software/scm/git/git-2.13.0.tar.gz

-- ファイルを解凍し、ディレクトリに移動  
tar -zxf git-2.13.0.tar.gz  
cd git-2.13.0

-- コンパイル  
make prefix=/usr/local all  
make prefix=/usr/local install

-- 古いGitのキャッシュを削除  
hash -r

-- 更新を確認  
git --version

CentOS 6でMySQL 5.7をインストールする

-- 古いバージョンを削除  
yum remove mysql*

-- インストール  
yum install https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
yum -y install mysql-community-server

-- バージョン確認  
mysqld --version

-- MySQL のアップグレードでは、その度に、mysql_upgrade するらしい  
mysql_upgrade -u root -p --force

-- 設定に応じて、ログ出力ファイルを作成する  
mkdir /var/log/mysql
chown mysql:mysql /var/log/mysql

-- 再起動  
service mysqld restart

CentOS 6でPHP7.1をインストールする

-- EPELとRemiリポジトリを追加  
yum install epel-release  
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

-- 古いバージョンを削除  
yum remove php-*

-- PHP7.1をインストール  
yum install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-mcrypt php-gd php-xml php-intl php-pecl-xdebug php-bcmath php-mysqlnd php-zip

-- バージョン確認  
php --version