私の目標
私は、ユーザー名とパスワードがsha256を使用してハッシュされる古いMySQLデータベースを持っています。もともとパスワードがなくてわかりません。これは、データベースからLinuxシステムへの単純なユーザー移行です。 Linux認証は他の部分で使用され、ユーザーが資格情報を再生成したくないため、Linuxでこれらのユーザーをすべて作成する必要があります。
これまでの私の考え
cryptを使用して、シャドウファイルを使用して奇妙なbase64形式を生成できることがわかりました。ただし、この場合は元のパスワードが必要です。 Linuxでのプロセスは次のとおりです。
- ソルトとパスワードに基づいた単純なsha512ハッシュの生成
- 1000を5000回繰り返し、古いハッシュ値とパスワードとソルトのハッシュ値を交互に連結して、新しいsha512ハッシュ値を計算します。また、sha512-crypt を使用すると、1000 ~ 999999999 のカスタムラウンド数を指定できます。
- パスワードハッシュ文字列は、最終ハッシュの特別なBase64エンコーディングを使用して生成されます。
引用:https://www.vidarholen.net/contents/blog/?p=33
最初のステップは、ソルトを使用してハッシュを生成することですので、これが可能でなければならないと思います。 Linuxはオープンソースなので、こんなところでcryptのソースコードを入手できると思います。https://code.woboq.org/userspace/glibc/crypt/crypt-entry.c.html そしてステップ2から始めてください。しかし、そのすべてをする前に、それがうまくいくかどうかわかりませんし、より簡単な方法があるかどうかを知りたいです。それ以外の場合は、これを行うための正しいLinuxソースコードをどこで入手できますか?私が提供したリンクが正しいかどうかわかりません。
ありがとうございます。
答え1
いいえ、申し訳ありません。古いハッシュを直接使用して新しいハッシュを作成することはできません。
まず、SHA-256ハッシュを持ち、それを使用してSHA-512ベースのハッシュを計算することについて話していますが、これはSHA-256ハッシュを反転しないと発生しません。第二に、同じハッシュベースの暗号化アルゴリズム(SHA-256ベースの暗号化の場合)を使用したい場合でも、$5$
リンクの最初のステップはまだ「sha512(パスワード+塩+パスワード)から代替合計を計算する」ことです。プレーンテキストのパスワードが必要です。
あるパスワードハッシュを別のパスワードハッシュに変換する方法は、ユーザーが何らかの方法でパスワードを更新して新しいハッシュを作成することです。あるいは、より良い方法は、新しいハッシュが存在しないときに古いハッシュへのログインを許可するようにログインルーチンを変更することです。そして同時に、新しいハッシュ値が生成されます。これにより、忘れたアカウントを除き、最終的に古いハッシュを破棄できます。
答え2
これを行う方法はいくつかあります。おそらく、独自のコードをコンパイルする必要はありません。
PAMをチェックしてください。モジュール式認証マネージャです。これは多くのGnu / Linuxシステムで使用されています。既存のハッシュを使用できるモジュールがある可能性があります。