Programming

암호화 알고리즘에서 패스워드와 초기화 벡터(IV) 역할

IT오이시이 2024. 12. 24. 08:00
728x90

암호화 알고리즘에서 패스워드와 초기화 벡터(IV)



암호화 알고리즘에서 패스워드와 초기화 벡터(IV)는 중요한 역할을 합니다.



■  패스워드 (Password)

개념: 패스워드는 사용자가 암호화된 데이터를 접근하거나 복호화할 때 사용하는 비밀 키입니다. 이는 데이터의 기밀성을 유지하기 위해 사용됩니다.


필요성:

1. 기밀성 유지: 패스워드는 인가된 사용자만이 데이터에 접근할 수 있도록 합니다.

2. 인증: 사용자가 올바른 패스워드를 입력해야만 데이터에 접근할 수 있어, 사용자 인증의 역할을 합니다.




■  초기화 벡터 (IV, Initial Vector)

개념: 초기화 벡터(IV)는 암호화 알고리즘에서 첫 번째 블록을 암호화할 때 사용하는 임의의 값입니다. 이는 동일한 평문이 암호화될 때마다 다른 암호문을 생성하도록 합니다.


필요성:

1. 보안 강화:
IV는 동일한 평문이 동일한 키로 암호화되더라도 다른 암호문을 생성하게 하여, 암호화 패턴을 숨깁니다.

2. 무작위성 제공:
IV는 암호화 과정에 무작위성을 추가하여, 암호화된 데이터의 예측 가능성을 줄입니다.


■ [암호화 예시]

아래는 AES(Advanced Encryption Standard) 알고리즘을 사용한 패스워드와 IV를 이용한 암호화의 예시입니다.


```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64

# 패스워드와 IV 설정
password = 'mysecretpassword'
iv = get_random_bytes(16)  # 16바이트의 무작위 IV 생성

# AES 암호화 객체 생성
cipher = AES.new(password.encode('utf-8'), AES.MODE_CBC, iv)

# 암호화할 데이터
data = 'This is a secret message.'

# 데이터 패딩 (AES는 블록 단위로 암호화하므로, 데이터 길이를 블록 크기에 맞춰야 함)
pad = 16 - len(data) % 16
data += chr(pad) * pad

# 암호화
encrypted_data = cipher.encrypt(data.encode('utf-8'))

# 암호문과 IV를 함께 저장 (복호화 시 필요)
encrypted_message = base64.b64encode(iv + encrypted_data).decode('utf-8')

print(f'Encrypted message: {encrypted_message}')
```



이 예시에서는 AES 알고리즘을 사용하여 데이터를 암호화하고, IV를 생성하여 암호화 과정에 사용했습니다.

암호화된 메시지와 IV를 함께 저장하여, 복호화 시 동일한 IV를 사용해 원본 데이터를 복원할 수 있습니다.



[복호화 예시]

'''

from Crypto.Cipher import AES
import base64

# 암호화된 메시지 (IV + 암호문 )
encrypted_message = '암호화된 메시지'  # 앞서 암호화에 생성된 암호문을 넣습니다( 16바이트 IV값과 암호문이 포함됨)

# 패스워드 설정
password = 'mysecretpassword'

# 암호화된 메시지를 디코딩하여 IV와 암호문 분리
encrypted_data = base64.b64decode(encrypted_message)
iv = encrypted_data[:16]  # 첫 16바이트는 IV
ciphertext = encrypted_data[16:]  # 나머지는 암호문

# AES 복호화 객체 생성
cipher = AES.new(password.encode('utf-8'), AES.MODE_CBC, iv)

# 복호화
decrypted_data = cipher.decrypt(ciphertext)

# 패딩 제거
pad = decrypted_data[-1]
decrypted_data = decrypted_data[:-pad]

# 원본 데이터로 변환
original_message = decrypted_data.decode('utf-8')

print(f'Decrypted message: {original_message}')
'''

[복호화 과정]

1. 암호화된 메시지를 Base64로 디코딩하여 IV와 암호문을 분리합니다.
2. AES 복호화 객체를 생성할 때, 암호화할 때 사용한 패스워드와 IV를 사용합니다.
3. 복호화를 수행하여 암호화된 데이터를 원본 데이터로 변환합니다.
4. 패딩 제거를 통해 원본 메시지를 복원합니다.

728x90
반응형