How would the attacker know if a guess is successful?
Ci sono solo tanti formati in cui sono memorizzate le chiavi private. Come attaccante, se potessi supporre che non hai archiviato la tua chiave privata nel tuo formato home-grown, vedrei solo se la mia ipotesi di forza bruta decifra la chiave privata in uno dei formati che avrei aspettarsi che ci sia una chiave privata.
Ad esempio, se supponevo che la tua chiave privata fosse una chiave PGP con armatura ASCII, controllerei semplicemente se i primi pochi byte decodificati in
-----BEGIN PGP PRIVATE KEY BLOCK-----
e viceversa per altri formati.
Se l'autore dell'attacco aveva una lista di possibili candidati a chiave pubblica per la chiave privata, poteva anche confrontare il modulo della chiave privata decrittografata risultante contro il modulo delle chiavi pubbliche e, se ne combinava uno, sapeva che aveva un decrittazione corretta.
Besides the brute force, are there other approaches to decrypt the private key given the above information?
Nessuno che conosca, a patto che tu usi una cifratura simmetrica strong. Altre vie di attacco significherebbe che ci sono stati seri punti deboli nel codice simmetrico che si usa per crittografare la chiave privata.
Are there significant differences between PBKDF2 and bcrypt in this scenario?
Probabilmente no. Entrambi sono considerati forti per la derivazione delle chiavi, anche se le opinioni divergono sugli esatti vantaggi e svantaggi. Uno degli svantaggi che condividono entrambi è che non usano molta memoria per derivare le chiavi, quindi possono essere implementate su processori molto veloci e altamente paralleli (si pensi alle GPU e agli FPGA).
(modifica: aggiunta la parte relativa al confronto con il modulo della chiave pubblica per confermare una decrittazione corretta)