#python #security #encryption #passwords
Вопрос:
В настоящее время я работаю над способом безопасного хранения моих личных ключей в приложении для чата, которое я создаю. Я хочу найти способ для шифрования ключей с помощью пароля, так что если кто-то получит доступ к моему компьютеру у них нет моих ключей для использования и во время входа в систему я могу ввести свой пароль, чтобы расшифровать ключи и воспользоваться ими.
Я нашел эту функцию пароля, используя SHA256 с PBKDF2HMAC с 100000 итераций и соли, но мне интересно, насколько безопасно это, и если кто-то может взломать его с перебором предполагали IAM с помощью пароля не менее 8 обозначения на клавишах с буквами и цифрами.
Это всего лишь демонстрация:
import base64
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.fernet import Fernet
import secrets
password_file = b'My list with passwords.'
login_salt = secrets.token_hex(16).encode()
во время входа в систему
def login(crypt_info):
password = input("Enter password to login:").encode()
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256,
length=32,
salt=login_salt,
iterations=100000,
backend=default_backend(),
)
decryption_key = (base64.urlsafe_b64encode(kdf.derive(password)))
decryption_key_fernet = Fernet(decryption_key)
decrypt_info = decryption_key_fernet.decrypt(crypt_info).decode()
print(decrypt_info)
ключи шифрования
def encrypt():
password = input("Enter password to register:").encode()
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256,
length=32,
salt=login_salt,
iterations=100000,
backend=default_backend(),
)
encryption_key = (base64.urlsafe_b64encode(kdf.derive(password)))
encryption_key_fernet = Fernet(encryption_key)
encrypt_info = encryption_key_fernet.encrypt(password_file)
print(encrypt_info)
login(encrypt_info)
encrypt()
Комментарии:
1. Теперь речь идет о силе вашего пароля. Хороший пароль, подобный тем, которые были сгенерированы с помощью dicewire, может оказаться недоступным для любого поиска. См. XKCD 936