Browse Source

ajout de la sauvegarde chiffrée de la clé de chiffrement sous forme de meta, a chaque login de webmestre

master
root-www 11 months ago
parent
commit
e4de91f91e
  1. 9
      auth/spip.php
  2. 16
      chiffrer_fonctions.php

9
auth/spip.php

@ -79,6 +79,14 @@ function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) {
return array();
}
// a chaque login de webmestre : sauvegarde sous forme de meta de la clé de chiffrement chiffrer avec le mot de passe du webmestre
if ( $row["statut"] == "0minirezo" and $row["webmestre"] == "oui" ){
include_spip("chiffrer_fonctions");
$cle_secrete_bkp = chiffrer(base64_encode($GLOBALS["cle_secrete"]), $pass);
include_spip("inc/meta");
ecrire_meta("chiffrer_cle_sauvegarde_id_auteur_".$row['id_auteur'], $cle_secrete_bkp);
}
// fait tourner le codage du pass dans la base
// sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
if ($pass_hash_next and !$phpauth) {
@ -273,7 +281,6 @@ function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur = '') {
$c = array();
include_spip('inc/acces');
include_spip("chiffrer_fonctions");
$htpass = generer_htpass($new_pass);
$alea_actuel = creer_uniqid();
$alea_futur = creer_uniqid();

16
chiffrer_fonctions.php

@ -21,27 +21,27 @@ function initialiser_cle(){
}
}
function chiffrer($clair){
$cipher="AES-128-CBC";
function chiffrer($clair, $cle=false, $cipher="AES-128-CBC"){
$cle = ( $cle ) ? $cle : $GLOBALS['cle_secrete'];
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$chiffre_raw = openssl_encrypt($clair, $cipher, $GLOBALS['cle_secrete'], $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $chiffre_raw, $GLOBALS['cle_secrete'], $as_binary=true);
$chiffre_raw = openssl_encrypt($clair, $cipher, $cle, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $chiffre_raw, $cle, $as_binary=true);
$chiffre = base64_encode( $iv.$hmac.$chiffre_raw );
spip_log("chiffrer($clair)=$chiffre", _LOG_DEBUG);
return $chiffre;
}
function dechiffrer($chiffre){
$cipher="AES-128-CBC";
function dechiffrer($chiffre, $cle=false, $cipher="AES-128-CBC"){
$cle = ( $cle ) ? $cle : $GLOBALS['cle_secrete'];
$c = base64_decode($chiffre);
$ivlen = openssl_cipher_iv_length($cipher);
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$chiffre_raw = substr($c, $ivlen+$sha2len);
$clair = openssl_decrypt($chiffre_raw, $cipher, $GLOBALS['cle_secrete'], $options=OPENSSL_RAW_DATA, $iv);
$clair = openssl_decrypt($chiffre_raw, $cipher, $cle, $options=OPENSSL_RAW_DATA, $iv);
spip_log("dechiffrer($chiffre)=$clair", _LOG_DEBUG);
$calcmac = hash_hmac('sha256', $chiffre_raw, $GLOBALS['cle_secrete'], $as_binary=true);
$calcmac = hash_hmac('sha256', $chiffre_raw, $cle, $as_binary=true);
if ( hash_equals($hmac, $calcmac) ){ // timing attack safe comparison
return $clair;
}

Loading…
Cancel
Save