yescryptのj9Tはどういう意味ですか(/etc/shadowから)

yescryptのj9Tはどういう意味ですか(/etc/shadowから)

この影文字列を考えてみましょう。

$y$j9T$PaFEMV0mbpeadmHDv0Lp31$G/LliR3MqgdjEBcFC1E.s/3vlRofsZ0Wn5JyZHXAol5

4つの部品があります。

  • ID:y(yescrypt)
  • パラメータ:j9T
  • 塩: PaFEMV0mbpeadmHDv0Lp31
  • ハッシュ: G/LliR3MqgdjEBcFC1E.s/3vlRofsZ0Wn5JyZHXAol5

尋ねる:

  1. j9Tparamフィールドの意味は何ですか?
  2. この領域には他のオプションがありますか?
  3. 公式文書はどこにありますか?

私はこの問題を見たことがあります。暗号化されたパスワードの形式は次のとおりです。/etc/shadowしかし、そこには説明はありません。

ベストアンサー1

婦人声明

以下は、暗号化と関連概念の専門的な理解なしに、私が見つけたものとそれを解釈する方法です。

兆候

次のように注目する価値があります。yescrypt CHANGES文書OpenWall GitHubに関する情報0.8.1(2015/10/25)と1.0.0(2018/03/09)の間の変更点yescryptサインが2つあります。:

  • $7$-scrypt非常にコンパクトでないクラシックハッシュ固定長エンコーディング
  • $y$- ネイティブyescryptとクラシックscryptハッシュ、新しいハッシュは非常にコンパクトです。可変長エンコーディング

これはとてもコンパクトです可変長エンコーディング第2段落の終わりに複雑さのすべてではありませんが、ほとんどを紹介するものは何ですか?このUNIX StackExchangeの答え言う。

パラメータ

パラメータの簡単な説明を見るにはBitcoinWiki Yescrypt パラメータいくつかは役に立つかもしれません:

範囲 説明する
password パスワードハッシュ
salt 塩を使う
flags トグル機能フラグ
N Nを増やすと、ランタイムとメモリ使用量が増えます。
r Rを増やすと、アルゴリズムが動作するブロックのサイズが増えます(したがってメモリ使用量が増えます)。
p 平行係数
t Tを増やすと、メモリ使用量を増やすことなくランタイムが増えます。
g 元のパスワードを知らなくても保存されたパスワードハッシュを強化するために使用されるハッシュ「アップグレード」の数
NROM キーが依存する結果ROM
DKLen エクスポートしたキーの長さ(出力)

滞在

$7$ハッシュが以下を使用する場合:

  • N- 1バイト(文字)でエンコード
  • r- 5バイト(文字)でエンコードされます。
  • p- 5バイト(文字)でエンコードされます。

$7$意味もあるから固定長エンコーディング、各パラメータにはエンコードするバイト数が事前に指定されており、各パラメータの順序は次のとおりです。$7$Nrrrrrppppp$....$

[]各バイトを角かっこで囲みます。$7$[N][r1][r2][r3][r4][r5][p1][p2][p3][p4][p5]$... $。また、これは、必要なバイトの正確な数が11であることを意味します。コンパクトではない)指定された順序のパラメータについて。

一方、ハッシュ値には$y$3つのパラメータが必要です。

  • flags- エンコードには少なくとも1バイト(文字)以上を使用してください。
  • N- エンコードには少なくとも1バイト(文字)以上を使用してください。
  • r- エンコードには少なくとも1バイト(文字)以上を使用してください。

それでも、$y$ハッシュはすべてのパラメータでエンコードして使用できます。可変長。実際、これは各パラメータの前に固有のサイズが付いていることを意味します。#最初のバイトにエンコードして続行#バイト:

$y$[flags_len=#][flags1].........[flags#][N_len=#][N1][N#][r_len=#][r1]$$

状況をより複雑にするために、必須パラメータの後にオプションのパラメータが続きます。have範囲。の価値haveによるとはいパスワード決めるもしあればpおよびtまた提供されたデータの一部gです。NROM

パラメータに関する包括的なガイドと、どのような状況でどのパラメータを使用する必要があるかを知るには、以下を参照するのが最善です。yescrypt PARAMETERS文書OpenWall GitHubから。

コーディング

パラメータフィールドの復号化は次のように行われます。decode64_uint32()、これ大量に索引渡すatoi64().現在のバイトのASCII値とデフォルトのピリオド文字(46)の違い:

atoi64_partial[77] = {
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
  64, 64, 64, 64, 64, 64, 64,
  12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
  25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
  64, 64, 64, 64, 64, 64,
  38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
  51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
};

各フィールドの最初のフィールドバイトから始めて、yescrypt次のようにします。

  1. 最初のフィールドバイトの使用インデックス配列上記のように。
  2. 取得配列項目を計算します。フィールドの部分値
  3. 取得配列項目を計算します。後続バイト数フィールド値の残りの部分をエンコードします。
  4. それぞれ次のバイト、アルゴリズムはそれを使用します配列を再インデックスします。そしてデータを追加最終フィールド値に達します。

他のプロセスのためのいくつかの擬似コードがあります。BitcoinWiki Yescryptの機能部分。

デモパラメータエンコーディング

PARAMETERS上記のファイルの例を見てみましょう。

  • flags = YESCRYPT_DEFAULTS
  • N = 4096
  • r = 32
  • p = 1
  • t = 0
  • g = 0
  • NROM = 0

上記の値のセットは標準として記述されます。大きくて遅い(メモリ使用量16MiB、bcryptパフォーマンスコストなど2^8 - 10-30ms待ち時間、16コアサーバーで1秒あたりのスループット1000+)選ぶユーザー認証のためのパスワードハッシュ、ROMなし

$y$署名です。

flags = YESCRYPT_DEFAULT = 182 = 0xB6 = j存在するyescrypt可変長エンコーディング

ここでは、次のように定義されたものと同じようflagsにデコードする必要があります。YESCRYPT_DEFAULTYESCRYPT_RW_DEFAULTS(YESCRYPT_RW | YESCRYPT_ROUNDS_6 | YESCRYPT_GATHER_4 | YESCRYPT_SIMPLE_2 | YESCRYPT_SBOX_12K)

  • YESCRYPT_RW = 0x002
  • YESCRYPT_ROUNDS_6 = 0x004
  • YESCRYPT_GATHER_4 = 0x010
  • YESCRYPT_SIMPLE_2 = 0x020
  • YESCRYPT_SBOX_12K = 0x080

実装する論理的ORyescrypt最後の数字を導き出し、エンコードすることを行います。

N = 4096 = 0x1000 = 9存在するyescrypt可変長エンコーディング。実際、N = 2 decoding_N_fields

r = 32 = 0x20 = T存在するyescrypt可変長エンコーディング

$これはyescript、オプションのパラメーターが指定されていないことを示します。

ついに、追加されました。理論的には長さに制限はありません。しかし、塩の長さは4の累乗でなければなりません。

$y$j9T$SALT$

はい

上記の説明を完了した後、視覚的に役立つ可能性がある有効で安全な例は次のとおりです。

  • $7$9/..../..../$SALTS$
  • $y$./.$SALT$
  • $y$8/.$SALT$

おすすめ記事