What : 어떤 문제가 있었는지
Try : 시도한 것
So : 그래서 뭘 느꼈는지
WHAT
기술 매니저님이 주신 코드를 보니까 비밀번호를 암호화 하시는걸 볼 수 있었습니다.
지금까지 토이 프로젝트를 하며 사용자의 중요한 정보(비밀번호)를 그대로 저장했습니다. 이런식으로 정보가 저장된다면
DB 접근 권한을 가진 관계자라면 누구든지 고객의 비밀번호, 개인정보를 볼 수 있다는 문제가 발생합니다.
TRY
암호화란?
암호화란 평문(보통의 글)을 암호문으로 변경하는 방법입니다. 반대로 암호문을 평문으로 복원하는 것을 복호화라고 합니다.
SHA-256
암호화 알고리즘 중 하나입니다.
Secure Hash Algorithm, 해시 알고리즘은 단방향 암호화에 쓰이는 알고리즘입니다.
즉, 복호화가 되지 않습니다. 그렇다고 안전을 보장하는 것은 아닙니다. 사전 공격(dictionary Attack), 무차별 대입 공격(Brute Force Attack) 등으로 비밀번호를 알아낼 수도 있습니다.
256, 256비트인 것을 의미합니다.
1비트란 2진법의 한자리를 의미합니다. 16진법을 나타내려면 4비트가 필요합니다. 256/4로 나누면 64입니다.
SHA-256은 64자리로 구성되어있고 각 자리는 16진수로 표현됩니다. 그래서 2의 256제곱가지 경우의 수가 나올 수 있습니다.
암호화는 인코딩인가요?
데이터를 다른 형식으로 변경한다는 점에서는 유사하지만 둘은 목표가 다릅니다. 일반적으로 우리가 어떠한 파일을 압축하는 것은 인코딩이지만 암호화라고 부르지는 않습니다. 그리고 인코딩은 데이터를 효율적으로 사용하기 위해 사용되고 원래의 것으로 되돌릴 수 있는 디코딩의 과정이 존재합니다.
그렇다면 암호화된 것은 복원할 수 없을까요? 아닙니다. 양방향 암호화는 해독 과정으로 암호문을 평문으로 복원할 수 있습니다. 기회가 되면 양방향 암호화 알고리즘 중 Java에서 사용된다는 aes256에 대해 정리하겠습니다.
SO
1. 데이터를 어떠한 형태로 저장해야할지에 대한 고민을 할 수 있게 되었습니다.
2. 혼동되는 단어의 의미를 제대로 파악하고 갑니다.
reference
'항해99' 카테고리의 다른 글
항해 6일차 TIL - app.py가 점점 복잡해지고 있어요!(FEAT - blueprint) (0) | 2022.12.11 |
---|---|
항해 5일차 TIL - Github에 기밀 정보가 올라가요. (0) | 2022.12.11 |
항해 3일차 TIL - (), [], {} 이건 도대체 무슨 괄호죠... ㅎ (0) | 2022.12.07 |
항해 2일차 TIL - ajax에 들어가는 property들은 어떤 의미일까요? (0) | 2022.12.07 |
항해 1일차 TIL2 - 브랜치는 어떻게 병합할까요? (1) | 2022.12.06 |