# 암호화 정보나 데이터를 알아보기 어려운 형태로 변환하는 과정 ## 암호화 방식과 알고리즘 ![](https://i.imgur.com/m89XXtr.png) - 대칭 암호화 : 암호화와 복호화에 같은 암호키를 사용하는 방식 - 비대칭 암호화 : 암호화와 복호화에 서로 다른 암호키를 사용하는 방식 - 혼합방식 암호화 : 암호화와 비대칭 암호화를 함께 사용하는 방식 ## 대칭 암호화 - 암호화와 복호화에 같은 키를 사용하는 암호화 방식 - 암호화를 수행할 때 사용한 키를 복호화에도 사용하여 데이터를 원래의 평문으로 복원한다. - 대칭 암호화에서는 키의 비밀성이 중요하다. - 키를 알지 못하는 사람은 암호화된 데이터를 해독할 수 없기 때문 - 대칭 암호화에서는 안전한 방법으로 키를 교환하고, 키의 보안성을 유지해야 한다 - 대표적인 대칭 암호화 알고리즘 : DES(Data Encryption Standard), 3DES(Triple Data Encryption Standard), AES(Advanced Encryption Standard) 등이 있다. ## 비대칭 암호화 - 암호화와 복호화에 서로 다른 키를 사용하는 암호화 방식 - 키를 안전하게 교환할 수 있으며, 키 관리와 보호 등에 대한 문제점을 해결하기 위한 방법으로 사용된다 - 대칭 암호화 방식보다 계산량이 많아서, 대규모 데이터 처리에는 적합하지 않을 수 있다. - **대칭 암호화에 비해 느리다** - 비대칭 암호화에서는 공개키와 개인키를 사용한다. - 공개키는 누구나 사용할 수 있으며, 개인키는 키 소유자만이 사용할 수 있다. - 암호화를 수행할 때는 공개키로 암호화하고, 복호화를 수행할 때는 개인키로 복호화한다. - 대표적인 비대칭 암호화 알고리즘으로는 RSA(Rivest-Shamir-Adleman)가 있다. ![](https://i.imgur.com/L07yv7Q.png) > 대칭키 암호화 vs 비대칭키 암호화 > > ![](https://i.imgur.com/8WFnZtR.png) ### 비대칭 암호화는 언제, 어떻게 사용되는가? - 데이터 무결성 - 암호화된 데이터는 권한이 없는 타인에 의해 수정될 수 없다 - 변조 여부는 해싱으로 확인하지만 암호화는 아예 변조를 못하게 막는 개념 - 데이터 보호 - 암호화된 데이터는 권한이 없는 타인에 의해 읽힐 수 없다 - 인증(Authentication) - 특정 데이터에 접근이 가능한 사용자인지 확인하는 과정 > ![](https://i.imgur.com/YCLabj6.png) > > --- > > ![](https://i.imgur.com/TRMFrmM.png) ### RSA 암호화 - 비대칭 암호화로 가장 많이 사용되는 암호화 - RSA 암호화는 다음 두가지 특징을 사용해 만들어졌다 1. 소인수분해의 어려움 2. 모듈러 연산의 특징 #### RSA암호화 키 생성 방식 1. 두 개의 소수(p, q)를 선택한다. 2. N = p*q를 계산한다. 3. φ(N) = (p-1)*(q-1)을 계산한다. (φ(N)은 N보다 작은 수 중에서 N과 서로소인 수의 개수를 나타낸다.) 4. φ(N)와 서로소인 e를 선택한다. (보통 e는 65537을 사용한다.) 5. d를 계산한다. d는 e*d ≡ 1 (mod φ(N))을 만족하는 d 값이다. 여기서 ≡ 기호는 모듈러 연산을 의미한다. 6. 공개키는 (e, N)이다. 개인키는 (d, N)이다. #### RSA 암호화 암/복호화 공식 암호화 : C ≡ M^e (mod N) 복호화 : M' ≡ C^d (mod N) - 공개키: (e, N) - 개인키: (d, N) - 원본 데이터: M - 암호화된 데이터: C - 복호화된 데이터: M' ![](https://i.imgur.com/FHQyA0k.jpg) ## 혼합방식 암호화 - 대칭 암호화와 비대칭 암호화를 조합하여 안전한 데이터 전송을 보장하는 방식 - 이 방식에서는 먼저 비대칭 암호화 방식을 사용하여 안전한 키 교환을 수행한다. 이후 데이터 전송에 대해서는 대칭 암호화 방식을 사용하여 데이터를 암호화하고 전송한다. - 혼합방식 암호화는 대칭 암호화 방식의 빠른 암호화/복호화 기능과 비대칭 암호화 방식의 안전한 키 교환을 모두 활용할 수 있어 안전한 데이터 전송을 보장할 수 있다. - 또한, 대칭 암호화 방식을 사용하기 때문에 대용량 데이터 처리에도 적합한다. - 전자상거래, 인터넷 보안, 데이터베이스 보안 등 다양한 분야에서 사용되며, 혼합방식 암호화를 사용하면 데이터의 안전성과 무결성을 보장할 수 있다. ## 해시함수를 이용한 암호화 ### 해시 함수 ![](https://i.imgur.com/6nmwBdj.png) - 해시 함수 : 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 - 입력 데이터가 같으면 출력 데이터도 같다는 특성을 가지고 있다. - 입력 데이터가 다르면 출력 데이터도 다르다는 특성을 가지고 있다. - 해시는 예측이 불가능하다. - 입력 데이터가 조금만 달라져도 출력 데이터가 완전히 달라지는 특성을 가지고 있다. ### 해시함수로 비밀번호를 안전하게 서버에 저장하는 과정 ![](https://i.imgur.com/PoPWOIp.png) 1. 회원가입을 위해 클라이언트가 ID/PW를 전달한다 - 전달 시 PW를 해시화해서 전달한다 2. 서버가 ID와 해시화된 PW를 저장하고 회원가입 결과를 알려준다. 3. 로그인을 위해 클라이언트가 ID/PW를 전달한다 - 전달 시 PW를 해시화애서 전달한다 4. 서버가 ID와 해시화된 PW를 비교하여 일치하는지 확인 후 로그인 결과를 알려준다. ### Rainbow Table ![](https://i.imgur.com/P83leNb.png) - 함수를 사용하여 비밀번호와 같은 데이터를 빠르게 복호화하기 위한 미리 계산된 테이블 - 레인보우 테이블은 미리 계산된 해시 값과 그에 해당하는 원본 데이터를 저장하고 있어, 해시 값을 쉽게 복호화할 수 있. - 레인보우 테이블 공격은 해시 값만 알고 있는 상황에서 원래 데이터를 찾아내는 데 쓰인다 ### Salt ![](https://i.imgur.com/hLellI3.png) - Salt는 임의의 데이터로, 비밀번호와 같이 해시화 할 데이터와 함께 사용된다 - Salt는 원본 데이터에 추가되어 새로운 해시 값을 생성하며, 이렇게 함으로써 레인보우 테이블 공격의 효과를 상당히 줄일 수 있다 - 각 사용자마다 고유한 Salt 값을 사용하면, 동일한 비밀번호라도 다른 해시 값이 생성되므로 레인보우 테이블을 사용한 공격에 대한 보안을 강화할 수 있다. - Salt는 저장되어야 하는 추가 데이터이지만, 그 값어치를 하는 중요한 보안 요소