javascript 암복호화

설영환·2020년 8월 11일
0

en-decryption in JS

목록 보기
1/1

javascript에서는 따로 암호화와 복호화 키생성등의 메소드를 가지고 있습니다. 암호화와 복호화 방법이나 알고리즘같은 경우에는 자료들은 많으나 javascript로 암복호화 한글로된 자료들이 없어서 이렇게 글을써서 제가 나중에 볼때도 기억하기 쉽고 다른분들에게도 도움이 될수 있도록 글을 써서 남기려 합니다.

1. 암호화 알고리즘

- 과거와 현대의 암호화

이미테이션 게임이라는 영화를 재미있게 보셨던 분들이 있을것입니다. 그당시 또는 그 이전의 암호화는 알고리즘 자체가 비밀이었습니다. 알고리즘이 공개되면 모든 암호를 풀수 있게됩니다. 그래서 알고리즘 자체가 암호문을 돌려주는 복호화의 키가 되었고 알고리즘을 알아내는게 목표가 되었습니다. 그래서 이미테이션 게임이라는 영화에서 베네딕트 컴버비치가 연기하였던 엘린튜링은 암호해독기를 자동으로 만들어서 brute force 공격을 하여 모든 알고리즘을 다 시행해보는 기계를 만들어서 암호해독에 지대한 공을 세우게 됩니다.
하지만 그당시의 암호해독기보다 더 좋은 컴퓨터들이 현재 모든 가정에 보급되어있고, 누구라도 간단한 암호해독은 컴퓨터 프로그램을 돌린다면 그냥 풀리게 됩니다. 그래서 현대의 암호화는 알고리즘은 공개되어 있으나 키가 없으면 하나하나 해보는 가짓수를 엄청나게 늘려서 1만회에 1초가 걸린다고했을때 최소는 6개월 최대는 몇년이 걸리는 방법을 사용합니다. (whiteBox algorithm)
그래서 현대의 암호화 강도는 최대 몇번을 하면 풀리는가를 암호화 강도를 결정합니다.

- 대칭키 알고리즘

이름과 같이 암호화할때의 키와 복호화 할때의 키가 같은 알고리즘입니다. 여러가지 알고리즘이 있지만 대표적으로 AES와 ECDH방법이 있습니다.
키가 유출되면 복호화가 언제든 가능해지기 때문에 키관리에 문제가 있어 DH키교환방법을 이용한 ECDH가 요새 나오고 있습니다.

- 비대칭키 알고리즘

암호화 할때와 복호화 할때의 키가 다릅니다. 암호화 할때의 키를 공개키라고 하는데 암호화 할때의 공개키로는 복호화가 불가능합니다. 그래서 복호화를 위한 키를 개인키라고 합니다. 개인키가 유출이된다면 암호화를 풀수있기때문에 개인키는 절대로 유출이 되면 안되는 키입니다.
현대의 알고리즘에서 말했듯이 개인키가없으면 푸는데 오랜시간이 걸리도록 해두었습니다. 대표적인 알고리즘으로 소수의 성질을 이용하여 인수분해의 어려움을 이용한 RSA가 있습니다.

2. 웹보안?

- 웹 보안의 취약성

웹에서는 보안이 제대로 되기 힘듭니다. 개발창을 열어서 보면 DOM구조부터 javascript 코드, flow까지 다 볼수 있습니다. 그래서 웬만한 보안성으로는 웹공격에 취약할수 있습니다. 그래서 network의 https로의 보안성을 더욱 향상시키는 방법을 취하고 있습니다.
몇몇 회사에서는 비밀번호나 주민번호같은 남이 알아서는 안되는 정보들을 애초에 암호화를 하여 원하는 곳에서만 사용할수있도록 암호화와 복호화 모듈을 따로 두고 암호화 연구소까지 두어 암호화강도를 강화하고 있습니다.

- Window.crypto.subtle

자바스크립트에서는 window.crypto.subtle이라는 객체를 두어 자바스크립트내에서 암복호화를 할수있도록 해두었습니다.
위 사진에서 보이는것과같이 암복호화는 물론 derive키 생성도 가능하고 RSA AES ECC 키 등 의 생성까지 모든것이 가능하게 되어있습니다.

지금 현재로써는 예제코드 작성은 나중에 수정으로 넣으려 합니다. 하지만
추가적으로 궁금하신분들은.. MDN페이지로 들어가셔서 많은 예제를 보시길 추천드립니다.

profile
Frontend 를 목표로합니다.

0개의 댓글