シャドウ用のSHA-512ハッシュパスワードを作成する方法は?


62

私が見た以前のSFの質問は、MD5ハッシュパスワードを生成する回答につながりました。

SHA-512ハッシュ化パスワードを作成する提案はありますか?スクリプトではなく1つのライナーを使用したいのですが、スクリプトが唯一の解決策である場合は、それでも問題ありません。

更新

以前のpy2バージョンをこれに置き換えます:

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

4
SHAとMD5は暗号化ではありません。それらはハッシュアルゴリズムです。重要な違いは、ハッシュされたデータは回復できないことです。あなたは何する必要があるの?
SmallClanger

ありがとうございました。質問を修正しました。man 5 shadow「暗号化されたパスワード」と呼ばれているので、私はその用語に沿って進みました。
ベルミンフェルナンデス

2
少し気味が悪いのならおApびします。シャドウ互換のパスワードハッシュを手動で生成しようとしていますか?その場合は、/etc/shadow内容を確認してください。表示され$x$salt$hashます。x使用されるアルゴリズムを表すcryptと、6SHA512れる現代linuxes、(参照に典型的ですman 3 crypt)。以下の回答のいずれかは、同じ塩を与える限り、同じハッシュを生成します。
SmallClanger

2
ああ、いやいや、全然だめじゃない。あなたは私が混乱したことを明確にしたので、とても感謝しています!
ベルミンフェルナンデス

1
ありがとうございました!PASSLIBベースの一つは、私はOS X上で動作させることができました唯一のものである
スティグBrautaset

回答:


65

ライナーは次のとおりです。

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

Python 3.3以降にmksaltはcryptが含まれており、使用がはるかに簡単(かつ安全)になります。

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

あなたがする引数を指定しない場合crypt.mksalt(それは受け入れることができるcrypt.METHOD_CRYPT...MD5SHA256、およびSHA512)、それが最強の利用可能を使用します。

ハッシュのID(最初のの後の数字$)は、使用される方法に関連しています:

  • 1-> MD5
  • 2a-> Blowfish(メインラインglibcではなく、一部のLinuxディストリビューションで追加)
  • 5-> SHA-256(glibc 2.7以降)
  • 6-> SHA-512(glibc 2.7以降)

塩とは何かを調べることをお勧めします。smallclamgersに従って、暗号化とハッシュの違いについてコメントしています。

更新1:生成される文字列は、シャドウおよびキックスタートスクリプトに適しています。更新2:警告。Macを使用している場合は、期待どおりに動作しないように見えるMacのPythonでこれを使用することに関するコメントを参照してください。


5
random_salt実際のランダムソルトに置き換えます。
ベルミンフェルナンデス14

6
Yosemiteでこれを機能させることはできません。これは、それが吐き出すもの$6asQOJRqB1i2です:-それは正しいほどには十分に長いとは思えません!
スティグブラウタセット

3
cryptモジュールにソルトを作らせてください: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))'
rrauenza

2
glibcはデフォルトで5000ラウンドのみを使用しますが、最近ではかなり弱いです。たとえば、「$ rounds = ###」を追加して、ラウンドの数を指定できますcrypt.crypt("test", "$6$rounds=200000$random_salt")。現在のラップトップでは200000で約100msかかります。
srparish

2
これは、少なくともMacでは使用しないでください。Mac(10.13.5)では、これは毎回同じ誤った結果を返します。
オスカーピアソン

37

Debianでは、mkpasswd を使用し て、/ etc / shadowに適した異なるハッシュアルゴリズムでパスワードを作成できます。whoisパッケージに含まれています(apt-fileによる)

mkpasswd -m sha-512
mkpasswd -m md5

利用可能なハッシュアルゴリズムタイプのリストを取得するには:

mkpasswd -m help 

HTH


3
どのパッケージがそれを提供しますか?mkpasswdFedoraの下にもプログラム(予想の一部)がありますが、この目的には役に立ちません。
クリスティアンCiupitu

彼が言ったように、mkpasswd彼が話しているバージョンはDebian / Ubuntu用です。mkpasswdFedoraの上で(少なくとも14まで)が不足している-mスイッチを。
slm

3
不思議なことに、それはDebianの遺産であるwhoisパッケージです。参照してください。dpkg -S /usr/bin/mkpasswd私はそれを自分自身を信じることができませんでした:D
Rbjz

パスワードを確認するには、最初の数字が6の場合、2〜3ドルの部分をソルトとして使用します。たとえば、root:$6$AbCdE$xyz:...次を使用する必要がありますmkpasswd -m sha-512 -S AbCdE。正しいパスワードで、同じハッシュを取得する必要があります。
リュック

24

ベストアンサー:grub-crypt

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**

1
簡単な解決策
。CentOS6

4
grub-cryptコマンドがあるシステムでは、これが本当に最も簡単で便利な方法です。あなたがそれを台無しにすることができたときに手動で塩をいじる意味はありません。問題は、ますます多くの最新システムにGRUB2があり、このコマンドが含まれないことです。
rsaw

11

さまざまなUnixタイプのOSでSHA-512パスワードを生成する短いCコードを次に示します。

ファイル: passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

コンパイルする:

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

使用法:

passwd-sha512 <password> <salt (16 chars max)>

この質問は3歳...
気難しい

このコメントはそれほど古いものではありません。あなたがそこに着いたかわいいアプリは、それがマニュアルページの例のように見えても、そこに1つの答えしかありません:)
Sampo Sarrala

4

SHA-512ハッシュパスワードを生成するPerlワンライナーソリューション:

perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'

RHEL 6で作業した


2

次のチェックと変更をCentos / RHELマシンに実行して、/ etc / shadowのすべてのパスワードハッシュがsha512で実行されることを確認してください。次に、passwdコマンドを使用してpassworkdを通常どおりに設定できます。

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi

2

シェルコマンドを使用して、ランダムなソルトを使用してSHA-512ハッシュパスワードを作成するワンライナーを次に示します。

[root @ host] mkpasswd -m sha-512 MyPAsSwOrD $(openssl rand -base64 16 | tr -d '+ =' | head -c 16)

ノート

  1. 「mkpasswd」を提供する「whois」パッケージ(Debian、SuSEなど)をインストールする必要がある場合があります。
  2. 「/ etc / shadow」の行の形式の詳細については、crypt(3)を参照してください。

残念ながら、whoisFedora 18 のパッケージは何も提供していませんmkpasswd
クリスティアンシウピトゥ

1
Arch Linuxの場合:/ usr / bin / mkpasswdの所有者はexpect 5.45-3
Nowaker

Fedora 20でも同じで、他のことを行います。
クリスティアンシウピトゥ14

2
残念ながら、提案されたコマンドには2つの問題があります。1)提供されたパスワードはシェルの履歴に保存され、「history」コマンドなどを持っているすべてのユーザーに表示されます。2)コマンドラインでランダムソルトを提供する必要はありません-ファンキーなopensslトリックを使用する代わりにmkpasswdにそれをさせるべきだと思います。(これは少なくともUbuntu Quantalでは当てはまります。「mkpasswd -m sha-512 foo」を複数回実行することでテストできます。ソルトの変更が表示されます。ソルトは2番目と3番目の$文字の間の値です。 )
オスカーピアソン14年

2

この回答のセキュリティへの影響については、以下のコメントをご覧ください

Rubyの考え方をお持ちの場合は、ここに1行のライナーがあります

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))

1
これは間違っています:Rubyのrand関数は安全ではありません-PRNGを使用するため、これを実行した瞬間の時間/状態の推測に基づいてリバースエンジニアリングできる結果を生成します。
オスカーピアソン

1

このスクリプトは、Ubuntu 12.04 LTSで動作しました:https : //gist.github.com/JensRantil/ac691a4854a4f6cb4bd9

#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512

以下の機能がありますが、他のいくつかの選択肢にはありません:

  • 塩を安全に生成します。誰もこれを手動で行うことに頼るべきではありません。今まで。
  • シェルの履歴には何も保存されません。
  • わかりやすくするため、生成されたユーザーのパスワードを出力します。これは、多くのユーザーのパスワードを生成するときに便利です。

2
これはchpasswd、システム上にある場合にのみ機能することに注意してください。
マットサンダース

参考までに、chpasswdはshadow-utils-4.1.5.1の-Sをサポートしていません
Saustrup

0

HASHアルゴはMESSAGEダイジェストを生成するためのものであり、何らかのHKDF(http://tools.ietf.org/rfc/rfc5869.txt)を使用する必要があるパスワードには決して適していません-PBKDF2またはBCryptを参照してください


良い点ですが、man cryptPBKDF2はサポートされていません。
ホイヘンス

0
#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

必要に応じて、私のgithubリポジトリからクローンを作成できます:https : //github.com/antoncohen/mksha


0

それは1つのライナーではありませんが、誰かを助けるかもしれません:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)

random暗号的に安全ではないため、os.urandom使用する必要があります。56文字の長さの辞書から8文字も少なすぎます。Pythonで何度も刺し傷をConcatentatingすることはあまりにも悪い形である(それはO(N ^ 2を持っている)複雑)
ヒューバートKario

0
$ htpasswd -c /tmp/my_hash user1
New password: 
Re-type new password: 
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30

明らかに、2番目のフィールドを取得するだけで、シャドウに追加した後、またはsudoで使用するためにファイルを削除できます(ほとんどの場合シャドウ)。


0

crypt(3)のmanページを見ると、cryptツールが更新され、glibcとsha256($ 5)およびsha512($ 6)、複数ラウンド、はるかに大きなソルトなどが使用されていることがわかります。 。

明らかに、SHA512は/ etc / shadowの動作に関連しています。

そうは言っても、このWebページは非常に役に立ちました。特にMKPASSWDは、これが私の問題を解決したためです。

「失われた」可能性のあるパスワードがある場合、MKPASSWDとソルトを使用してSHA512ハッシュを生成し、候補パスワードのリストを確認/拒否できます。

私はJohn the ripperを使用しますが、少なくとも私のハードウェア(Raspberry Pi)と私の予算(何もない)では、Johnはそれを行うことができません(raspbian無料版の高度なcrypt / glibcのものをサポートしていないようです)

/ etc / shadowの読み取り/書き込みを行うための十分な許可があるので、ハッシュを上書きするだけで済みます。これは学術的な課題です。


注Glibcの注意事項この関数のglibc2バージョンは、追加の暗号化アルゴリズムをサポートしています。

   If salt is a  character  string  starting  with  the  characters
   "$id$" followed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine, id identifies the encryp‐
   tion method used and this then determines how the  rest  of  the
   password  string is interpreted.  The following values of id are
   supported:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So  $5$salt$encrypted  is  an  SHA-256  encoded   password   and
   $6$salt$encrypted is an SHA-512 encoded one.

0

perl / pythonで記述されたワンライナーの代替が必要な場合、mkpasswdが最適です。Debian whoisパッケージに含まれていますが、CentOS / RHELシステムにはありません。Debianバージョンのmkpasswdを変更し、OpenSSLに基づくより強力なソルト生成メカニズムを組み込みました。結果のバイナリは、Debianのすべてのバージョンコマンドラインパラメーターを完全に保持します。コードはgithubで利用可能であり、Linuxフレーバーでコンパイルする必要があります: mkpasswd


-4

SHA-512とがどのように関連するのかわかりません/etc/shadow。これらのパスワードはcrypt編集されます。

ただし、SHA-512でハッシュ化されたパスワードが必要な場合は、これを行うことができますecho -n the_password | sha512sum。/ etc / shadowの出力は使用できません。


2
echo -n the_passwordそのため、改行をハッシュしていません。</ PEDANT>
SmallClanger

のパスワードはshadow何年も暗号化されていません。最新のシステムでは、少なくともmd5を使用しています。
アレクサンダーヤンセン

6
実際にはパスワードshadowはまだcrypt()編集されていますが、いくつかの異なるアルゴリズムをサポートするために機能が更新されています。とにかく、この回答で説明されている方法は、に適したハッシュを生成しません/etc/shadow。アルゴリズムは、単一のSHA-512ハッシュラウンドよりも複雑です。
スナップ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.