Zum Inhalt

scrypt: LuaJIT FFI-basierte scrypt-Bibliothek für nginx-module-lua

Installation

Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-scrypt

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-scrypt

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-scrypt v1.0, das am 09. Oktober 2014 veröffentlicht wurde.


lua-resty-scrypt ist eine scrypt (Passwort)-Hashing-Bibliothek für OpenResty.

Hallo Welt mit lua-resty-scrypt

local scrypt = require "resty.scrypt"
local hash   = scrypt.crypt "Mein Geheimnis"         -- gibt einen Hash zurück, der in der DB gespeichert werden kann
local valid  = scrypt.check("Mein Geheimnis", hash)  -- valid ist true
local valid  = scrypt.check("Mein Versuch",  hash)    -- valid ist false

local n,r,p  = scrypt.calibrate()                      -- gibt n,r,p Kalibrierungswerte zurück

Lua API

string scrypt.crypt(opts)

Verwendet den scrypt-Algorithmus, um einen Hash aus dem Eingabewert zu generieren. Der Eingabeparameter opts kann entweder string (ein secret) oder eine Tabelle sein. Wenn es sich um eine Tabelle handelt, können Sie auch einige Konfigurationsparameter übergeben. Verfügbare Tabellenoptionen (Standardwerte sind wie folgt):

local opts = {
    secret   = "",
    keysize  = 32,
    n        = 32768,
    r        = 8,
    p        = 1,
    salt     = "zufällige (saltsize) Bytes, die mit OpenSSL generiert wurden",
    saltsize = 8
}

Wenn Sie opts etwas anderes als eine Tabelle übergeben, wird es tostring-ifiziert und als secret verwendet. keysize kann zwischen 16 und 512 liegen, saltsize kann zwischen 8 und 32 liegen.

Diese Funktion gibt einen String zurück, der wie folgt aussieht:

n$r$p$salt$hash

Alle Teile stellen einen hex dump ihrer Werte dar.

Beispiel
local h1 = scrypt.crypt "Mein Geheimnis"
local h2 = scrypt.crypt{
    secret  = "Mein Geheimnis",
    keysize = 512 
}

boolean scrypt.check(secret, hash)

Mit dieser Funktion können Sie überprüfen, ob das secret wirklich mit dem hash übereinstimmt, der mit scrypt.crypt aus demselben secret generiert wurde. Der hash enthält auch die Konfigurationsparameter wie n, r, p und salt.

Beispiel
local b1 = scrypt.check("Mein Geheimnis", scrypt.crypt "Mein Geheimnis") -- gibt true zurück
local b2 = scrypt.check("Mein Geheimnis", scrypt.crypt "Kein Geheimnis") -- gibt false zurück

n, r, p scrypt.calibrate(maxmem, maxmemfrac, maxtime)

Diese Funktion kann verwendet werden, um die Konfigurationswerte n, r und p aus den Parametern maxmem, maxmemfrac und maxtime zu berechnen. Dies sind die Standardwerte dafür:

maxmem     = 1048576
maxmemfrac = 0.5
maxtime    = 0.2

Die Ergebnisse können je nach Verarbeitungsleistung Ihres Computers variieren.

Beispiel
local n,r,p = scrypt.calibrate()
local hash  = scrypt.crypt{
    secret  = "Mein Geheimnis",
    n = n,
    r = r,
    p = p
}

number scrypt.memoryuse(n, r, p)

Zählt den Speicherverbrauch des scrypt-Algorithmus mit den angegebenen n, r und p Argumenten.

Beispiel
local memoryuse = scrypt.memoryuse(scrypt.calibrate())

Die Standardparameter für n, r und p sind:

n = 32768
r = 8
p = 1

GitHub

Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-scrypt.