scrypt: bibliothèque scrypt basée sur FFI de LuaJIT pour nginx-module-lua
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou 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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-scrypt v1.0 publié le 09 octobre 2014.
lua-resty-scrypt est une bibliothèque de hachage scrypt (mot de passe) pour OpenResty.
Hello World avec lua-resty-scrypt
local scrypt = require "resty.scrypt"
local hash = scrypt.crypt "My Secret" -- retourne un hachage qui peut être stocké dans la base de données
local valid = scrypt.check("My Secret", hash) -- valid est vrai
local valid = scrypt.check("My Guess", hash) -- valid est faux
local n,r,p = scrypt.calibrate() -- retourne les valeurs de calibration n,r,p
API Lua
string scrypt.crypt(opts)
Utilise l'algorithme scrypt pour générer un hachage à partir de l'entrée. Le paramètre d'entrée opts peut être soit une string (un secret) soit une table. Si c'est une table, vous pouvez également passer certains paramètres de configuration. Les options de table disponibles (les valeurs par défaut sont les suivantes) :
local opts = {
secret = "",
keysize = 32,
n = 32768,
r = 8,
p = 1,
salt = "octets aléatoires (saltsize) générés avec OpenSSL",
saltsize = 8
}
Si vous passez à opts autre chose qu'une table, cela sera converti en string et utilisé comme secret. keysize peut être compris entre 16 et 512, saltsize peut être compris entre 8 et 32.
Cette fonction retourne une chaîne qui ressemble à ceci :
n$r$p$salt$hash
Toutes les parties présentent un hex dump de leurs valeurs.
Exemple
local h1 = scrypt.crypt "My Secret"
local h2 = scrypt.crypt{
secret = "My Secret",
keysize = 512
}
boolean scrypt.check(secret, hash)
Avec cette fonction, vous pouvez vérifier si le secret correspond vraiment au hash qui a été généré avec scrypt.crypt à partir du même secret. Le hash contient également les paramètres de configuration comme n, r, p et salt.
Exemple
local b1 = scrypt.check("My Secret", scrypt.crypt "My Secret") -- retourne true
local b2 = scrypt.check("My Secret", scrypt.crypt "No Secret") -- retourne false
n, r, p scrypt.calibrate(maxmem, maxmemfrac, maxtime)
Cette fonction peut être utilisée pour compter les valeurs de configuration n, r et p à partir des paramètres maxmem, maxmemfrac et maxtime. Voici les valeurs par défaut pour ceux-ci :
maxmem = 1048576
maxmemfrac = 0.5
maxtime = 0.2
Les résultats peuvent varier en fonction de la puissance de traitement de votre ordinateur.
Exemple
local n,r,p = scrypt.calibrate()
local hash = scrypt.crypt{
secret = "My Secret",
n = n,
r = r,
p = p
}
number scrypt.memoryuse(n, r, p)
Compte l'utilisation de la mémoire de l'algorithme scrypt avec les arguments n, r et p fournis.
Exemple
local memoryuse = scrypt.memoryuse(scrypt.calibrate())
Les paramètres par défaut pour n, r et p sont :
n = 32768
r = 8
p = 1
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-scrypt.