chatGTP에게 보안 솔루션을 부탁해봤습니다.

Eriniss·2022년 12월 11일
1
post-thumbnail

openAI 기반의 chatGTP를 처음 써봤습니다.

처음써본 소감은 정말 놀라웠습니다. 과연 이게 스택오버플로우를 대체할 수 있을지 궁금하여 예시로 chatGTP에게 보안 솔루션을 부탁해 봤습니다.

1. 해시 함수를 구성하는 알고리즘인 md5를 사용하면 안 되는 이유를 알려주세요.

MD5는 128비트 해시 값을 생성하는 일반적으로 사용되는 해시 함수입니다. 그러나 몇 가지 취약점이 있는 것으로 밝혀져 더 이상 안전한 것으로 간주되지 않습니다. MD5의 주요 문제 중 하나는 충돌하기 쉽다는 것입니다. 즉, 두 개의 다른 입력이 동일한 해시 값을 생성할 수 있음을 의미합니다. 공격자가 잠재적으로 이 속성을 사용하여 합법적인 파일과 동일한 해시 값을 가진 악성 파일을 생성하여 사용자가 악성 파일이 안전하다고 믿게 만들 수 있으므로 보안 위험이 발생할 수 있습니다.

2. 그렇군요. MD5 해시 함수를 sha256으로 교체하려고 합니다. 여기에 salt process를 추가하고 싶습니다. 도와주실 수 있나요?

물론 해시 함수에 솔트를 추가하는 것은 보안을 강화하는 좋은 방법입니다. 솔트는 해시 값이 계산되기 전에 해시 함수의 입력에 추가되는 임의의 문자열입니다. 이렇게 하면 공격자가 미리 계산된 해시 테이블(레인보우 테이블이라고도 함)을 사용하여 해시된 암호를 해독하지 못하도록 방지할 수 있습니다. SHA256 해시 함수에 솔트를 추가하려면 SHA256 알고리즘에 솔트를 전달하기 전에 솔트를 입력 문자열에 연결하기만 하면 됩니다. 예를 들어 Python에서는 다음 코드를 사용할 수 있습니다.

import hashlib

def get_hash(password, salt):
    # Concatenate the salt and password
    salted_password = salt + password
    
    # Calculate the SHA256 hash of the salted password
    hash_value = hashlib.sha256(salted_password.encode('utf-8')).hexdigest()
    
    return hash_value
    

이 예에서 get_hash 함수는 암호와 소금을 입력으로 사용하고 소금을 암호에 연결하고 결과 문자열의 SHA256 해시를 계산하고 해시 값을 반환합니다. 그런 다음 코드에서 이 함수를 사용하여 다음과 같이 소금으로 암호를 해시할 수 있습니다.

# Generate a random salt
salt = '94cfa7e932d12efa2d038a91f39b7e74'

# Hash a password using the salt
hashed_password = get_hash('my_password', salt)

# Print the hashed password
print(hashed_password)

이 코드에서는 salt 변수를 임의의 값으로 설정하고 get_hash 함수를 호출하여 비밀번호 'my_password'를 salt로 해시합니다. 결과 해시 값은 콘솔에 인쇄됩니다.

3. 오, salt process를 100,000번 수행하고 싶습니다. 코드를 수정해 주시겠습니까?

물론입니다. 다음은 암호를 100,000번 솔트 처리하는 get_hash 함수의 업데이트된 버전입니다.

import hashlib

def get_hash(password, salt):
    # Concatenate the salt and password
    salted_password = salt + password

    # Hash the salted password 100,000 times
    for i in range(100000):
        salted_password = hashlib.sha256(salted_password.encode('utf-8')).hexdigest()

    return salted_password

이 업데이트된 get_hash 함수 버전에서 salted_password의 SHA256 해시는 이전 해시 값을 다음 반복의 입력으로 사용하여 루프에서 100,000번 계산됩니다. 이것은 "키 확장"으로 알려져 있으며 공격자가 무차별 암호 대입 기술을 사용하여 해시된 암호를 크랙하는 것을 훨씬 더 어렵게 만듭니다.

이전 예제와 같은 방식으로 이 함수를 사용할 수 있습니다.

# Generate a random salt
salt = '94cfa7e932d12efa2d038a91f39b7e74'

# Hash a password using the salt
hashed_password = get_hash('my_password', salt)

# Print the hashed password
print(hashed_password)

이 코드는 암호 'my_password'의 솔트 및 확장 SHA256 해시를 생성하고 결과 해시 값을 콘솔에 인쇄합니다.

고마워요, chatGPT!

천만에요! 기꺼이 도와드리겠습니다. 다른 도움이 필요하신가요?

여기까지가 chatGTP와의 대화였습니다. 정말 놀랍지 않나요? 지능이 있다는 착각까지 들게 만들정도로 훌륭한 대답을 해주었습니다! 문제의 핵심을 파악하고 해결방안을 제시해주며 대화의 자연스러운 흐름을 이어갑니다. 앞으로의 openAI의 활용이 더욱더 기대됩니다. 어쩌면 정말 21세기판 알렉산드리아 도서관이 탄생할지도 모르겠네요.

0개의 댓글