Sto tentando di rispondere a una domanda di pratica sugli esami CASP.
Qualcuno potrebbe commentare le opzioni sottostanti riguardo alla logica dietro ogni oggetto? Dov'è l'errore logico dietro ogni affermazione?
A Storage-as-a-Service company implements both encryption at rest as well as encryption in transit of customers’ data. The security administrator is concerned with the overall security of the encrypted customer data stored by the company servers and wants the development team to implement a solution that will strengthen the customer’s encryption key.
Which of the following, if implemented, will MOST increase the time an offline password attack against the customers’ data would take?
A.
key = NULL ; for (int i=0; i<5000; i++) { **key = sha(key + password)** }
B.
password = NULL ; for (int i=0; i<10000; i++) { password = sha256(key) }
C.
password = password + sha(password+salt) + aes256(password+salt)
D.
key = aes128(sha256(password), password))
fonte: varie banche di domande per l'esame CASP
Questo è quello che so:
1) SHA-256 o superiore genera hash veramente forti con una probabilità di collisione molto bassa. È altamente improbabile che si verifichi una collisione.
2) Ho letto un altro articolo, ma non conclusivo riguardo all'opzione JavaScript: link decifratura
3) Questo è molto più articolato riguardo alle opzioni per migliorare le alternative: link
4) Ho trovato questo vero esempio dello schema di codifica SHA256 e anche di generare un salt per renderlo ancora più sicuro sconfiggendo le tabelle hash precalcolate. Lo eseguiremo quindi attraverso il controllo delle password per garantire che la password sia stata digitata correttamente:
// From Python: Penetration Testing for Developers
#!/usr/bin/python
import uuid
import hashlib
# Let's do the hashing. We create a salt and append it to the password once hashes.
def hash(password):
salt = uuid.uuid4().hex
return hashlib.sha512(salt.encode() + password.encode()).hexdigest() + ':' + salt
# Let's confirm that worked as intended.
def check(hashed, p2):
password, salt = hashed.split(':')
return password == hashlib.sha512(salt.encode() + p2.encode()).hexdigest()
password = raw_input('Please enter a password: ')
hashed = hash(password)
print('The string to store in the db is: ' + hashed)
re = raw_input('Please re-enter your password: ')
# Let's ensure the passwords matched
if check(hashed, re):
print('Password Match')
else:
print('Password Mismatch')