android

 

ハッシュアルゴリズムとソルト

ハッシュについて

元データに対して後述するアルゴリズムを使って、単体では意味のわからないデータに変換すること。ハッシュ化されたデータは元には戻せない。

データ改ざんやファイルが正しく送信できているかのチェック(チェックサム)や、パスワード保存時などに使われる。

ハッシュ化のアルゴリズム

  • MD5(Message Digest Algorithm 5)
    • 128ビットの適当なハッシュ値を作成
    • 作成されたハッシュから元データを求めることができた報告があるなど脆弱性があるので、非推奨
  • SHA-1(Secure Hash Algorithm 1)
    • 160ビットの適当なハッシュ値を作成
    • こちらも同じく脆弱性があるので、非推奨
  • SHA-2(Secure Hash Algorithm 2)
    • SHA-224、SHA-256、SHA-384、SHA-512の4種類
    • 最長のSHA-512が安全性が高く、SHA-256が最もよく利用されている
  • SHA-3(Secure Hash Algorithm 3)
    • SHA-2の後継
    • Keccak(ケチャック)と呼ばれるハッシュ関数でSHA-3として採用された

ソルトを使ったセキュリティ強化

何らかの原因でハッシュ化されたパスワード一覧が流失してしまうケースを考えます。SHA-256などの一般的によく使われるアルゴリズムでそのパスワード一覧ハッシュ化すると、突破されてしまいます。

これに対する対策として、ソルトと呼ばれるランダムなデータを元データに追加した上でハッシュ化します。

ソルトは

  • ソルトに固定値を使う
  • 桁数固定(できれば32byte or 64byte)のランダムなソルトを使う

の2通りはあり、ランダムなソルトを使う場合はDBにもソルトを保存しておく必要がある。

例:

平文パスワード:password
ソルト:random_salt_string
ハッシュ化対象の値:random_salt_stringpassword
ハッシュ値(SHA-256):BD294F9FFC10B8A7F1AB6A1DB399CDCAA76DCEDE0CC0129510D60D526722A595
DBに保存する値:random_salt_string:BD294F9FFC10B8A7F1AB6A1DB399CDCAA76DCEDE0CC0129510D60D526722A595

ハッシュ化の実装

ハッシュ計算をする関数

private fun calculateHash(input: String, algorithm: String): String {
    // MD5ハッシュ計算
    val byteArray = MessageDigest.getInstance(algorithm).digest(input.toByteArray(UTF_8))

    // バイト配列を16進数の文字列に変換
    return byteArray.joinToString(separator = "") { byte -> "%02x".format(byte) }
}

MD5

calculateHash(input = input, algorithm = "MD5")

SHA-256

calculateHash(input = input, algorithm = "SHA-256")

Android SharedPreferencesの種類前のページ

Android 公開鍵暗号方式と共通鍵暗号方式を使った暗号化・復号化次のページ

関連記事

  1. android

    Android SharedPreferencesの確認方法

    androidアプリでデータを永続化する時に使うSharedPrefe…

  2. android

    Android 公開鍵暗号方式と共通鍵暗号方式を使った暗号化・復号化

    公開鍵暗号方式暗号化に公開鍵、復号に秘密鍵を使う暗号方式アプリ側…

  3. android

    【最短!】パッケージ名の変更方法

    どうも、フリーランスエンジニアのyoshikiです。&…

  4. android

    Android SharedPreferencesの種類

    Key-Valueペアの読み書きを行う時の候補です。SharedP…

コメント

  1. この記事へのコメントはありません。

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

  1. LINE Bot

    【LINE Bot 作り方】GASでLINE Botを作るための準備
  2. android

    Android SharedPreferencesの種類
  3. LINE Bot

    【2018年 LINE Bot 作り方】GASで支出管理Botを作ってみた
  4. LINE Bot

    【誰でもできる!】自分用LINE BOTの作り方
  5. android

    【最短!】パッケージ名の変更方法
PAGE TOP