web-dev-qa-db-ja.com

シャドウのSHA512ハッシュパスワードを作成するにはどうすればよいですか?

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

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

更新

以前のpy2バージョンをこのバージョンで置き換える:

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

ここにワンライナーがあります:

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

Python 3.3+には mksalt in 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を使用している場合は、これの使用に関するコメントをpython Macで期待どおりに動作しないように見える)で参照してください。

69
davey

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

mkpasswd -m sha-512
mkpasswd -m md5

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

mkpasswd -m help 

HTH

38
mrossi

ベストアンサー: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)**
24
Wayne

これは、さまざまな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)>
12
BoogieBug

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

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

RHEL 6で作業しました

4
Ivan Chau

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

Rubyの考え方については、ここでワンライナーです:

'password'.crypt('$6$' + Rand(36 ** 8).to_s(36))
2
TrueDuality

シェルコマンドを使用してランダムなソルトで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)を参照してください。
2
ajchace

/ etc/shadowのすべてのパスワードハッシュがsha512で行われるように、Centos/RHELマシンに対して次のチェックと変更を実行してください。その後、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
ckliborn

このスクリプトは、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

他の代替手段のいくつかにはない以下の機能があります。

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

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

0
Liviu

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

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)
0
jordixou

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

0
chris
$ 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
Joshua Gies
#!/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
Anton Cohen

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

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

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

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

私はリッパージョンを使用しますが、少なくとも私のハードウェア(Raspberry Pi)と予算(無)では-ジョンはそれを実行できません(ラズビアンの無料バージョンでは高度な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
joeomniback