SNS ์ฌ์ฉ ์ฆ๊ฐ์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์๋น์ค๊ฐ ๋ง์ด ์ถ์๋๋ฉด์ ๊ฐ์ธ์ ๋ณด ๊ฐ๋ช ์ฒ๋ฆฌ์ ์ค์์ฑ์ด ๋์์ง๊ณ ์์ต๋๋ค.
๊ฐ์ธ์ ๋ณด ๊ฐ๋ช ํ๋ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ค๋ฅธ ํํ๋ก ๋ณํํด์ ๊ฐ๊ฐ์ธ์ ํน์ ํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ธ์ต ๋ฐ ์ฆ๊ถํ์ฌ์์๋ ๊ณ ๊ฐ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์๊ฒฉํ๊ฒ ๊ฐ๋ ๋ฐ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค. ๊ฐ์ธ์ ์ ์ ์ ๋ณด์ ์ ์ฉ ์ ๋ณด๋ ๋งค์ฐ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฌํ ๋ฐ์ดํฐ๋ ๊ฐ๋ช ํ์ฒ๋ฆฌ๋ฅผ ํด์ ์ฌ์ฉ์ ํ๊ณ ์์ต๋๋ค.
๋ฐ์ดํฐ ๊ฐ๋ช ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๋ช ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
1. ์ผ๋ฐํ/๋ฒ์ฃผํ
์ผ๋ฐํ๋ ๊ฐ์ธ์ ๋ณด์ ํน์ ๋ถ๋ถ์ ๋ํํ๋ ์ผ๋ฐ์ ์ธ ๊ฐ์ผ๋ก ๋์ฒดํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ๋ํ์ ์ธ ์์๊ฐ ๋์ด ์
๋๋ค.
๊ตฌ์ฒด์ ์ธ ๋์ด ๋์ 10๋, 20๋, 30๋๋ก ๋ณํ์ ํ๋ค๋ฉด ๊ฐ์ธ์ ๋์ด์ ๋ํ ๋๋ต์ ์ธ ์ ๋ณด๋ ์ ์งํ๋ฉด์๋, ์ค์ ๋์ด๋ ๋
ธ์ถํ์ง ์์ ์ ์์ต๋๋ค.
2. ์ต๋ช
ํ
์ต๋ช
ํ๋ ๊ฐ์ธ์ ๋ณด๋ฅผ ์์ ํ ์ญ์ ํ๊ฑฐ๋, ์ต๋ช
ํ๋ ์๋ก์ด ๊ฐ์ผ๋ก ๋์ฒดํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฆ์ ๋ณํ(*)๋ก ๋์ฒดํ๋ ๊ฒฝ์ฐ ์
๋๋ค.
3. ๋์ฒด ํ ํฐ ์์ฑ / ์ผ๋ จ๋ฒํธ ์์ฑ
๊ณ ๊ฐ ์๋ณ ๋ฒํธ๋ฅผ ์ผ๋ จ๋ฒํธ๋ก ๋์ฒดํ์ฌ ๊ฐ์ธ์ ๋ณด๋ฅผ ๊ฐ๋ช
ํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ธ์ ์ค์ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉด์๋, ๊ฐ์ธ์ ์๋ณํ ์ ์๋ ํํ๋ก ๋ณํํ ์ ์์ต๋๋ค.
4. ๋
ธ์ด์ฆ ์ถ๊ฐ
๋
ธ์ด์ฆ ์ถ๊ฐ๋ ๋ฐ์ดํฐ์ ์์์ ๋
ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ์ฌ ์๊ณก์ํค๋ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ธ์ ์๋ ์ ๋ณด์ ์์์ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋, ๋นผ์ ์๋ ์ ๋ณด๋ฅผ ์๊ณกํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ๋ SNS์ ์ธ์ฆ ์ฌ์ง์ ์ฌ๋ฆด ๋, ๊ฐ์ธ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๊ฑฐ๋ ์์น ํด์ ์ฌ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ํ์ ์ธ ์์์
๋๋ค.
SHA (Secure Hash Algorithm)
SHA๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ช ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ์ํธํ ๊ธฐ์ ์ค ํ๋์ ๋๋ค. ์ฃผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ํธํ์ ์ฌ์ฉ๋๋ฉฐ, ๋จ๋ฐฉํฅ ๋ณํ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ ๋๋ฌธ์ ์ํธํ๋ ๊ฐ์ ์ญ์ผ๋ก ๋ณตํธํ ํ๊ฑฐ๋ ์ถ์ ํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ํธํ ์ ์ ๊ฐ๊ณผ ์ํธํ ๋ ์ดํ์ ๊ฐ์ ํ์ ํํ๋ก ๋ฏธ๋ฆฌ ์ ์ฅํ๋ค๋ฉด (์ด๋ฅผ ๋ ์ธ๋ณด์ฐ ํ ์ด๋ธ ์ด๋ผ๊ณ ํฉ๋๋ค) ๊ฐ๋ฅํ ์๊ธฐ์ด์ง๋ง, ์ธ๋ถ์ธ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด SHA ๊ฐ์ ๊ณ์ฐํ๊ณ ์ ์ฅํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์ถ๋ ฅ๋ ๊ฐ์ ํ๋ฒ์ ์ํธํ ํ ์ ์๋ ๋ฐ์ดํฐ์ ๊ธธ์ด ๋ํ ์ต๋ ์ฝ 18EB(์์ฌ๋ฐ์ดํธ)๋ก ๊ฑฐ์ 300ํ์ด์ง ์ง๋ฆฌ ์ฑ 30์กฐ ๊ถ ์ ๋๊ฐ ๋ฉ๋๋ค.
Python์ผ๋ก ๊ตฌํํ๊ธฐ
Python์ผ๋ก ๋ฐ์ดํฐ ๊ฐ๋ช ํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ด์ฅ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ hashlib์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ํธ๊ฐ(Salt) ๊ฐ์ SHA256 ๊ฐ์ ๋๋คํ ๋ ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ๋ ๊ฐ์ด๋ผ๊ณ ์ดํดํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋์ผํ ์ ๋ ฅ๊ฐ์ด๋ผ๋ ์๋ก ๋ค๋ฅธ ์ํธ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ถ๋ ฅ๊ฐ์ด ๋ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ ์ธ๋ณด์ฐ ํ ์ด๋ธ ๊ณต๊ฒฉ(Rainbow Table Attack) ๋ฑ์ ๋ฐฉ์งํ์ฌ ๋ณด์์ฑ์ ๊ฐํํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
import os
import pandas as pd
from hashlib import sha256
# ๋ฐ์ดํฐํ๋ ์ ์ค์
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('max_colwidth', -1)
def SHA(text, salt=None):
# ๋ฌธ์์ด์ ๋ฐ์ดํธ ๋ฌธ์์ด๋ก ๋ณํ
byte_str = text.encode('utf-8')
# hashlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ SHA-256 ํด์ ํจ์๋ฅผ ํธ์ถ
hash_obj = sha256()
# ์ํธ๊ฐ์ด ์๋ค๋ฉด ํด์ ํจ์์ ์ถ๊ฐ ์
๋ ฅ๊ฐ์ผ๋ก ์ ๊ณต
if salt:
salt_bytes = salt.encode('utf-8')
byte_str += salt_bytes
# ์
๋ ฅ๊ฐ์ ํด์ ํจ์์ ์
๋ ฅํ์ฌ ์ถ๋ ฅ๊ฐ์ ์์ฑ
hash_obj.update(byte_str)
# ์ถ๋ ฅ๊ฐ์ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฐํ
return hash_obj.hexdigest()
# ์ํธ๊ฐ ์์ฑ ํจ์
def generate_salt(length=16):
return os.urandom(length).hex()
def data_hash(text, salt=None):
salt = generate_salt() # ๋ฌด์์ ์ํธ๊ฐ ์์ฑ
hashed_str = SHA(text, salt)
return hashed_str
# ๋งคํ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ ๋ณด์ ์ ๋งค์ฐ ์ทจ์ฝํฉ๋๋ค. ์์๋ก๋ง ๋ณด์๊ธธ ๋ฐ๋๋๋ค
hash_table = pd.DataFrame(["Hello World", "Hello World!", "Hello People"], columns=["๋ฐ์ดํฐ ์๋ณธ"])
hash_table['SHA256 ๊ฐ๋ช
์ฒ๋ฆฌ'] = hash_table['๋ฐ์ดํฐ ์๋ณธ'].apply(lambda x: data_hash(x))
hash_table
'๐ป ITยท๊ธฐ์ ยทํต๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ChatGPT๋ก ์ธ๋ค์ผ ๋ง๋ค๊ธฐ (์ด๋ฏธ์ง ์์ฑ) (0) | 2023.03.21 |
---|---|
[Python] ์ ์ฌ ๋ฉ๋ด ์ถ์ฒํด์ฃผ๋ ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ (ft. Flask) (1) | 2023.03.20 |
[Tips] Python์ค๋ฝ๊ฒ ์ฝ๋ ์์ฑํ๊ธฐ (0) | 2023.03.12 |
[Snippet] ์ํฉ๋ณ Tuple, List ๋ณํ ๋ฐฉ๋ฒ (0) | 2023.03.10 |
[API] ChatGPT Python์ผ๋ก ์ฌ์ฉํด๋ณด๊ธฐ - Part.2 (0) | 2023.03.08 |
๋๊ธ