본문 바로가기
Python

Python - salt와 nonce에 대해

by 올엠 2024. 3. 10.
반응형

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는 데이터 암호화, 디지털 서명, 인증 등에 사용되며 매번 새로운 키가 사용된다.

반응형