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

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

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

  2. android

    Android SharedPreferencesの確認方法

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

  3. android

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

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

  4. android

    Android SharedPreferencesの種類

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

コメント

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

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

  1. android

    Android SharedPreferencesの種類
  2. LINE Bot

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

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

    Android SharedPreferencesの確認方法
  5. android

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