반응형
salt와 nonce는 모두 암호화에서 사용되는 용어로, 비밀번호 및 데이터 해킹을 방지하는 데 도움이 된다.
salt는 비밀번호에 추가되는 임의의 문자열이다.
비밀번호를 암호화할 때 salt를 사용하면 동일한 비밀번호를 가진 두 사용자의 암호화된 비밀번호가 서로 달라지게 된다. 이는 대규모 데이터베이스에서 비밀번호를 해킹하는 데 사용되는 공통적인 방법인 대조 공격을 어렵게 만들어 암호 보호에 도움이 된다.
nonce는 일회용 암호화 키이다.
nonce는 암호화 알고리즘에 사용되며, 매번 다른 암호화 키를 생성한다. 이는 같은 데이터를 여러 번 암호화하더라도 매번 다른 암호화된 데이터를 생성하기 때문에, 공격자가 암호화된 데이터를 해독하는 데 어려움을 겪게 만들 수 있다.
예제 코드로 보면 salt와 nonce는 다음과 같다.
salt
import hashlib
def hash_password(password, salt):
# 랜덤한 암호화 키를 생성
key = hashlib.sha256(salt.encode("utf-8")).digest()
# 비밀번호와 암호화 키를 사용하여 암호화된 비밀번호를 생성합니다.
encrypted_password = hashlib.pbkdf2_hmac(
algorithm="sha256",
password=password.encode("utf-8"),
salt=key,
iterations=10000,
length=32)
return encrypted_password
password = "password"
salt = os.urandom(16)
encrypted_password = hash_password(password, salt)
print(encrypted_password)
nonce
import hashlib
def encrypt_data(data, ):
# nonce 랜덤한 암호화 키를 생성
nonce = os.urandom(16)
key = hashlib.sha256(nonce.encode("utf-8")).digest()
# 암호화된 데이터를 생성
encrypted_data = hashlib.pbkdf2_hmac(
algorithm="sha256",
password=data.encode("utf-8"),
salt=key,
iterations=10000,
length=32)
return encrypted_data, nonce
data = "Hello, world!"
encrypted_data, nonce = encrypt_data(data, nonce)
print(encrypted_data, nonce)
salt와 nonce는 같은 것 같지만 다른부분이 매번 생성하는지에 대한 부분이다. salt는 매번 새로운 키를 사용하지 않는다. 일반적으로 비밀번호 암호화에 사용됩니다.
nonce는 데이터 암호화, 디지털 서명, 인증 등에 사용되며 매번 새로운 키가 사용된다.
반응형
'Python' 카테고리의 다른 글
Python - Datetime 특정 시간 간격으로 나누기 (0) | 2024.03.10 |
---|---|
TSQL - 문자열 포함 확인(Like) (0) | 2024.03.10 |
Python - SSL warnings 출력 안하는/비활성화 방법 (0) | 2024.03.07 |
Python - HTTP Keep-alive 를 통한 성능 향상 (0) | 2024.03.07 |
Python - AWS S3 Select 와 Atena 차이점, 기본 사용법 (0) | 2024.03.07 |