Ho aggiunto la mia risposta qui perché ritengo che quelli esistenti non indirizzino direttamente la tua domanda abbastanza per i miei gusti.
Diamo un'occhiata a RFC 4868 (riguardante IPSec, tuttavia copre la funzione HMAC-SHA256 che intendi da usare - em mine ):
Block size: the size of the data block the underlying hash algorithm
operates upon. For SHA-256, this is 512 bits, for SHA-384 and
SHA-512, this is 1024 bits.
Output length: the size of the hash value produced by the
underlying
hash algorithm. For SHA-256, this is 256 bits, for SHA-384 this
is 384 bits, and for SHA-512, this is 512 bits.
Come note WhiteWinterWolf , più lungo di B è sconsigliato perché il valore deve essere sottoposto a hash con SHA-256 prima ( vale a dire 512 bit in questo caso) e meno di L è scoraggiato (256 bit in questo caso). Tuttavia, una chiave a 256 bit è eccessiva poiché qualsiasi cosa di 128 bit o superiore non può essere forzata brutale nella vita corrente di nessuno, anche se ogni computer nel mondo stava lavorando per craccarlo.
Quindi raccomanderei una chiave a 128 bit, generata con un generatore di numeri pseudocasuali crittograficamente sicuro (CSPRNG). Se si desidera archiviare questo come testo, è possibile rappresentare una chiave a 128 bit generando una stringa esadecimale casuale di 32 caratteri, oppure in alternativa è possibile generare 16 byte casuali e quindi eseguirli tramite una funzione base64.