PSS verify with saltLength: 0 rejects valid signatures
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, node.js
- Ambito
- backend, cryptography
Direzione di ricerca
Inizia in lib/pss.js, in verify, al passaggio 11, e controlla come si comporta la sottostringa del salt quando sLen è zero. Esegui la riproduzione nell’issue, poi aggiungi o esegui un test di regressione per un salt vuoto. Il lavoro è completato quando forge verifica firme RSASSA-PSS valide con salt di lunghezza zero e la verifica PSS esistente continua a passare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
publicKey.verify(..., forge.pss.create({ ..., saltLength: 0 })) returns false for valid RSASSA-PSS signatures with an empty salt, including signatures forge itself produced.
const forge = require('node-forge');
const crypto = require('crypto');
const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048 });
const pub = forge.pki.publicKeyFromPem(publicKey.export({ type: 'spki', format: 'pem' }));
const prv = forge.pki.privateKeyFromPem(privateKey.export({ type: 'pkcs8', format: 'pem' }));
const pss = () => forge.pss.create({
md: forge.md.sha256.create(),
mgf: forge.mgf.mgf1.create(forge.md.sha256.create()),
saltLength: 0
});
const md = () => { const m = forge.md.sha256.create(); m.update('msg'); return m; };
// signed by OpenSSL, verified by forge
const sigOpenSSL = crypto.sign('sha256', Buffer.from('msg'),
{ key: privateKey, padding: crypto.constants.RSA_PKCS1_PSS_PADDING, saltLength: 0 });
console.log(pub.verify(md().digest().bytes(), sigOpenSSL.toString('binary'), pss()));
// signed by forge, verified by OpenSSL, then by forge
const sigForge = prv.sign(md(), pss());
console.log(crypto.verify('sha256', Buffer.from('msg'),
{ key: publicKey, padding: crypto.constants.RSA_PKCS1_PSS_PADDING, saltLength: 0 },
Buffer.from(sigForge, 'binary')));
console.log(pub.verify(md().digest().bytes(), sigForge, pss()));
node repro.js
Actual:
false
true
false
Expected:
true
true
true
Tested with node-forge 1.4.3 (same lib/pss.js as main 01119d6), Node.js v26.13.0.
In lib/pss.js verify, step 11 is var salt = db.substr(-sLen);. For sLen === 0 that is db.substr(-0), which returns all of db instead of '' (RFC 8017 9.1.2 step 11). db.substr(db.length - sLen) works for every sLen.
Credit: https://ucsbplse.github.io/
- Lingua principale
- JavaScript
- Stelle
- 5.4k
- Fork
- 875
- Merge medio
- 3m
- PR unite (30g)
- 6
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di digitalbazaar/forge
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
digitalbazaar/forge#1147 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
digitalbazaar/forge#1146 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 58/100
digitalbazaar/forge#1145 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
digitalbazaar/forge#1144 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
digitalbazaar/forge#1143 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di digitalbazaar/forge
Issue simili
-
area:models enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
status: ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
melodic-software/claude-code-plugins#14389 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100