1 알고리즘 분류 방식
- 결정적 알고리즘 / 확률적(통계적) 알고리즘
- 결정적 알고리즘 - 같은 입력값이 들어왔을때 같은 출력값을 주는 알고리즘.
- 확률적 알고리즘 - 무작위 알고리즘 이라고도 한다. 같은 입력값이 들어와도 그 결과는 달라질 수 있다 . 비밀번호 보안알고리즘의 경우 확률적 알고리즘이 되어야 함이 바람직하다. 왜냐하면 같은 비밀번호를 암호화하여 그 결과가 언제나 동일하다면 - 다 뚫릴테니까...
-> 이것을 보장하기 위하여 네트워크는 nonce 난스 를 생성하거나. SHA256 과같은 해쉬알고리즘의 경우 salt를 이용하여 다이제스트를 생산해낸다. 이로서 - 같은 값을 입력하더라도 다른 리턴값이 출력되기 때문에 보다 안전하다고 할수있다.
- nonce란 - 오직 한번만 생성되는 무작위 랜덤문자열. number only used once. number once.
- nonce를 통해서, 데이터의 최신성 및 보안성을 강화할 수 있다. 일정 주기적으로 계속 서로다른 난스를 넣어서 네트워크 통신을 함으로써, 이 데이터가 언제 만들어진 데이터인지 확인시켜주는 역할을 수행할 수있다.(밀리세컨드단위의 캘린더를 난스로 쓰면 되니까.)
2 알고리즘 분류방식 2
- 알고리즘 자체에 의존하거나
-> 알고리즘 자체가 비밀. 이것이 발각될경우 다뚫린다.
- 알고리즘은 알려져있으나 키에 의존하거나.
-> 현재는 보통 이쪽.. 왜냐하면 소프트웨어를 개발하고 - 또 프로토콜을 다른 노드와 교환하며 통신해야하는데 알고리즘 자체를 비밀로 하는 것이 쉽지가 않다.
- 만약에 알고리즘의 취약성이 노출될경우 그것을 모두가 함께 보완할 수 있다(장점이자 단점)
- 키가 노출되면 뚫린다.
3 대칭키 알고리즘
- 대칭키 : 암호화할 때의 키와 복호화할 때의 키가 동일하다.
- 이를 테면 AES 가 있다.
- 원래 DES를 썼는데 -> 얘는 56비트밖에 안된다. 즉 경우의 수가 2의 56승밖에 안되고 몹시 취약하다.(1970년대에 결정했으니... 뭐 그때는 안전하다고 생각했겠지..)
- AES는 256비트를 사용한다. -> 경우의 수가 2의 256승. 얘를 깨는데 드는 시간과 비용을 생각하면 꽤나 안전하다고 볼 수 있다.
- 스트림 암호화 방식과 블록 암호화 방식이 있다.
- 스트림 암호화 방식 : 암호화해야 하는 평문의 길이만큼의 무작위랜덤값을 생성하여 -> 해당 키에 맞게 평문글자를 교체 & 자리바꿈한다.
- 블록 암호화 방식 : 일정 길이의 무작위 랜덤값을 생성한다. 그 값이 반복된다. 56비트 DES암호화의 경우 56비트의 무작위 랜덤값을 생성. 그것을 repeat 한 길이의 두 문자열. 연산을 수행한다.
- 대칭키 암호화의 역사는 길다. 기원전 카이사르 시절에는 영문자를 3칸씩 뒤로 교체한것 (A->D, B->E...) 을 암호로 사용했다. 사실상 현대 대칭키는 이것의 심화버전이라고도 볼수있다. (+ 자리바꿈.)
- 수학적연산을 수행해야하는 비대칭키 알고리즘에 비하여 암호화 속도가 빠르다는 장점이 있다.
- 비밀키를 어떻게 교환할 것인가에 대한 문제가 있다.
- 양자 컴퓨터가 현실화 되면 아주 무력해질 것이다. 256비트이든.. 512비트이든.. 다차시간안에 뚫어버린다고 한다.
4. 비대칭키 알고리즘
- 공개키 알고리즘 이라고도 한다.
- 공개키는 인증의 역할( 내가 나다!!) 을 할 수 있고, 비밀키는 비밀성의 역할을 수행할 수 있다.
- 이를테면 앨리스와 밥이 서로 통신을 한다고 했을때, 앨리스는 자신의 비밀키로 데이터를 암호화하고, 거기다가 밥의 공개키로 암호화를 하면 => 데이터를 받는 밥은. 자신의 비밀키로 복호화 할 수 있으므로 비밀이 유지되었다고 확신할 수 있으며, 앨리스의 공개키로 복호화할 수 있으므로 이 데이터는 앨리스로부터 온 데이터가 맞다고 확신할 수 있다.
- 그렇다면 공개키는 누가 보장해주는가 ? 그 공개키가 과연 정말로 앨리스의 것인지 혹은 내가 모르는 제3자가 사칭한 공개키인지 어떻게 안단말인가? 공개키는 공개되어있기 때문이다 (뭔가 웃기다. )
- 공개키는 인증기관에 의해 인증된다. 인증기관의 비밀키로 인증되어있으며- 인증기관의 공개키또한 공개되어 있으니 우리는 인증기관의 공개키를 이용하여 아 - 이것은 진짜로 이 인증기관이 인증해준 공개키니까 믿을 수 있어. 라는 것이다.
- 그럼 그 인증기관은 또 누가 인증해주는가?? 공개키 인증 -> 을 인증기관이 공개키로 인증 -> 그럼 또 그 공개키를 인증.... 끝이없다는 것이다. 결론부터 말하자면 이러한 공개키 인증은 트리 구조로 상위로 올라가며, 상위에 있는 인증기관들은 서로를 상호 인증하는 방식으로 보장하고 있다. 우리나라의 최상위 인증기관은 해외의 최상위 인증기관과 서로의 공개키를 인증해준다.
5 공동인증서 문제
- 원래는 공개키를 인증해주는 역할을 공인기관 (= 국가기관) 밖에 할 수 없었다.
- 그러나 2020년 법이 개정되면서 사설 기관도 공개키 인증을 할 수 있게 되었다. 그래서 원래는 공인인증서라고 부르던 것이 이제는 공동인증서라는 이름으로 불리게 되었다.
- 원래는 국가가 보장한 은행들만 공인인증서를 발급하고, 우리는 그 공인인증서를 이용해서 내가 나라는 것을 증명한 뒤에 은행 업무를 볼 수 있었다. 또 이 인증서별로 역할 (은행업무.. 국제업무.. 등등) 이 다르고 그 유효기간 (1년, 2년...) 도 상이하였다.
- 이제는 카카오 뱅크도 공인인증서를 발급할 수 있다.
- 국가가 공개키를 보장해준다는 것과. 사설기관이 공개키를 보장해준다는 것. 에 대하여 사람들이 의문점을 가지기 시작하여 법이 바뀐것이다. 국가를 신뢰한다는 개념과 . 사설업체를 신뢰한다는 개념에 어떤 차이가 있는가? 에 대하여 사람들의 인식이 바뀌었다는 증거일 것이다. 이전에는 공인 기관 (= 국가기관 ) 이 아니면 신뢰할 수 없다는 인식이 있었으나 이제는 '국가가 발행하든 사설이 발행하든 뭔상관이야! 어쨌뜬 난 은행업무를 보고싶고!! 지금은 넘 불편하다구! ' 같은 생각(?)이 많이 반영된 것 같다.
6 보안 취약성 공격
- 랜섬웨어는 보안 취약성을 이용한 공격중의 하나이다.
- 공격대상자의 컴퓨터에 침입하여 파일을 암호화하고 - 그 암호화한 키는 공격자만이 가지고 있으므로. 이것을 풀기위하여 너의 돈을 내놓으라고 요구하는 것이다.
- 키 관리의 중요성에 대하여 생각해 볼 수 있다. 키를 잃어버리면 데이터는 영영 못보는 거나 마찬가지...발급해준 측에서도 어쩔도리가 없다.