2024. 1. 26. 23:47ㆍInformation Security 정보보안/Web Security 웹 보안
배울내용:
암호화
현대암호화 종류
암호화의 장단점
대칭키
비대칭키
DB 비밀번호 암호화
MITM 공격
MD5
SHA1
SHA2
CIA 보안
제가 지금 부터 작성하는 모든글은 제가 공부기록용이기 때문에 정확하지 않을수 있음을 알려드립니다.
틀린게 있으면 댓글로 써주시면 고치겠습니다.
오늘의 주제는
암호화
이다
먼저 아래의 링크를 먼저 보고 오자
https://sarimus.tistory.com/38
위에 링크를 요약하자면
#암호화 과정
encryption
평문 (암호화키) => 암호화
decryption
암호화 (복호화키) => 평문
암호학에서 중요개념
CIA
기밀성 Confidentiality (3자가 알수 없게)
무결성 Integrity (위변조 불가)
가용성 Availability (사용시간 유지)
이 3개는 보안하면서 암호학 뿐만아니라 다른
보안 분야에서도 자주 볼것이다
현대암호화 종류
단방향 :비대칭 : hash 암호화만 수행 (무결성) 복호화가 불가능하기때문에 key로 활용
1. 복호화 X
2. 평문 (암호화) => 암호문
3. 메세지 진위를 확인 (위변조) , 무결성
4. hash algorithm : md5($1) , sha , sha2($6) 등등
양방향 : 대칭 : 암호화/복호화 키가 동일
비대칭 : 암호화/복호화 키가 한쌍으로 다른키가 쓰임
하이브리드 : 키교환은 비대칭 , 데이터 전달은 대칭
1. 한쌍의 알고리즘 (암호화/복호화)를 사용
2. 평문 (key : 암호화 ) 암호문
암호문 (key : 복호화 ) 평문
3. 대칭/비대칭 암호화
DES : date encryption standard ( 16라운드 )
전 세계적으로 대칭 블록 암호화 표준
1. 64bit 대칭키 크기 *** (block크기)
2. 블록 byte당 1bit 의 패리티 (오류검사) 비트 블록당할당 [ 1byte = 8bit ]
3. 라운드키크기 56bit ( 8bit가 패리티 )
분할된실제 대칭키 크기
(라운드 안에서 동작 : 48 bit (32-8) (32-8) )
4. 16라운드
키워드 : 64bit 대칭키 크기 , 16라운드
3DES
DES를 다중으로 반복하여 암호 수행
1.block 크기 => 64bit
2.실제대칭키 크기 => 168bit (192/3 = (64-8) + (64-8) + (64-8)
3.블록 byte당 1bit씩 패리티(오류검사) 비트
4.분할된크기 56bit => 실제 대칭키 크기 48bit
실재대칭키= 56X3 = 168bit
des,3des 차이점 : 대칭키크기 3배 , 3번 반복
AES (advanced encryption standard)
1.DES의 취약점 완화 , NIST (미국 국립표준연구소) 에서 개발
2.SPN구조(병렬레이어구조) 이용 (Feistel구조와 spn구조 검색해볼것)
3.block크기 -> 128bit
4.대칭키크기 -> 128/192/256bit
비대칭 암호화의 장점
key 동기화에 대한 안정성이 높음
인증을 통한 기밀성 보장
부인방지를 통한 무결성 보장
비대칭 암호화의 단점
1. 암호화/복호화의 처리속도가 느림
2. MITM 공격에 취약함 (인증서를 통해 해결)
MITM공격 (Man in the middle attack) 중간자 공격
공격자가 통신경로 중간에 끼어드는 형태
공개키 교환 과정에서 공격자가 자신의 공개키를 끼워 넣어 속임
MariaDB 에서 암호화 하기
mysql -p mysql 로 들어간뒤에
show databases; 한뒤에 보면
여러개의 DB 가있지만
그중에 test 를 써보겠다
(단 방향 암호) = hash 암호 암호화가능 ,복호화X
select md5('test');
하면 md5로 test라는 DB 를 암호화 했다
그외에도
select sha1('test');
select sha2(' test ',256);
select sha2(' test ',512);
이것들을 이용해
이렇게 암호화 시킬수있다
암호화
select hex(암호화종류 ('비밀번호', 해쉬암호종류('키값'));
이제는 아래와 같이 column 안에 value 를 md5 , sha1 이나 sha2 로 암호화 시킨다
select hex(aes_encrypt('asd123',md5('sevas')));
select hex(aes_encrypt('asd123',sha1('sevas')));
select hex(aes_encrypt('asd123',sha2('sevas',256)));
hex(aes_encrypt('asd123',sha2('sevas',512)));
그리고 아래와 같이 복호화 시킨다
select aes_decrypt(unhex('B688F3861568B112D5D60C48C8E987C8'),md5('sevas'));
select aes_decrypt(unhex('F22AD8472D863D4443DFEDEB66D42EED'),sha1('sevas'));
select aes_decrypt(unhex('09F01FF638796435B6531E912CCF324A'),sha2('sevas',256));
select aes_decrypt(unhex('A12E8C1C4F090802237FE9C8BB9DC016'),sha2('sevas',512));
그리고 이런걸 보면 aes_encrypt 같은경우에는 함수로 이루어 져있다
그리고 함수안에 또 함수가있으니 헷갈리지 말자
이제는 한번 실습해보자
! 잠시동안은 아래에 내리지말고 한번 풀어보길 바란다 !
insert into class values ("" , "master" , hex(aes_encrypt("*12ya",md5("monster"))),"마스터",now());
....
md5 만 sha1, sha2 로 바꿔주면된다
오늘은
이런식으로 비밀번호를 암호화를 배웠고
대칭키와 비대칭키의 기본들도 배웠다
다음시간에는 url 로 이용해 정보를 DB 에서 받아오는걸 해볼것이다
그럼 20000