코딩 공부/보안 6

모노 알파베틱 암호화 (Monoalphabetic Cipher)

앞선 카이사르 암호화와 마찬가지로 치환암호 26자의 알파벳을 각기 다른 알파벳으로 치환시킴 코드화 알파벳이 오름차순된 ('abcd...') 문자열과 랜덤으로 뒤섞인 문자열을 준비해서 각 알파벳의 index를 참고하여 치환한다 function encrypt(str) { let resultArr = []; for (let i = 0; i < str.length; i++) { if (/[a-z]/.test(str[i])) resultArr.push(lowerMonoAlphabet[lowerAlphabet.indexOf(str[i])]); else if (/[A-Z]/.test(str[i])) resultArr.push(upperMonoAlphabet[upperAlphabet.indexOf(str[i])]); ..

카이사르 암호(Caesar cipher)

카이사르 암호란 각 글자를 n만큼 shift시킨 간단한 치환암호 예 : 'abz'를 +1만큼 shift -> 'bca' 코드화 문자열의 각 문자를 유니코드화 -> 각 유니코드에 원하는 shift만큼 더해줌 -> 이 때 'z' 다음에는 'a'가 와야하므로 'z'의 유니코드를 넘어서면 알파벳의 갯수인 26을 빼줌 -> 대문자도 고려해줌 -> 유니코드를 다시 알파벳으로 변환 -> 복호화는 반대로 하면 됨 function encrypt(str) { let resultArr = []; let unicodeArr = []; for (let i = 0; i < str.length; i++) { const unicode = str[i].charCodeAt(0); if (str[i] !== " ") { if ( (uni..

RSA

RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 복호화가능 (일반적으로 민감만 정보 보호하려고 사용) 개인키로 암호화한 내용은 공개키로만 복호화가능 (공인인증서처럼 본인을 인증하는 용도로 사용) 공개키와 개인키를 만드는 과정 1. 두 소수 p와 q를 만든다 2. p-1, q-1과 각각 서로소인 정수 e를 준비한다. 3. ed를 (p-1)(q-1)로 나눴을때 나머지가 1인 d를 찾는다. ((p-1)(q-1)과 e가 서로소가 아니면 만족하는 d가 없음 그래서 2번과정 필요) 4. N = pd (N은 평문인 a보다 커야한다), N과 e는 공개키, d는 개인키 5. ..

openssl 설치 및 키 발급

openssl 이란 SSL과 TLS프로토콜의 개방형 소스구현 openssl을 이용하여 자체적으로 키를 생성할 수 있다. openssl 설치 brew update // 홈브루 최신상태 업데이트 brew search openssl // openssl 검색 brew install openssl1@1.1 // openssl 설치 터미널에서 openssl을 입력하면 접속됨 키 발급 개인키 만들기 openssl에 들어간후 genrsa -aes256 -out rootca_private.key 2048 // 암호화 하지 않으려면 -aes256빼고 만들면 됨 개인키로 공개키 만들기 openssl에 들어간후 rsa -in rootca_private.key -out rootca_public_key.pem -pubout op..

JSencrypt 라이브러리를 이용한 암호화, 복호화

JSencrypt 라이브러리는 RSA 방식으로 데이터를 암/복호화한다 RSA 방식 이란 RSA RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 fullfish.tistory.com JSencrypt 라이브러리 다운 주소 JSEncrypt Introduction When browsing the internet looking for a good solution to RSA Javascript encryption, there is a whole slew of libraries that basically take the fantastic work done by Tom..

Hash와 Salt 그리고 Bcrypt

기본 용어 hash : 다양한 길이를 가진 데이터를 고정된 길이의 데이터로 매핑하는것 digest : hash에 의해 암호화된 데이터 avalanche(눈사태) 효과 : 작은 변화에도 결과가 완전히 달라짐 rainbow 공격 : 공격자가 rainbow table을 이용해서 원본 데이터 찾는것 rainbow table : 원본 데이터와 매칭되는 digest들을 모아놓은 테이블 salt : digest 생성시 추가하는 임의의 문자열 brute force : 무차별 대입 공격 개념 hash란 일반적으로 자료구조에서 검색을 할때는 선형적으로 검색하므로 시간복잡도가 O(n)이다. 해시를 쓰면 John Smith를 특정 해시함수를 통해 나온 값을 (여기서는 02)인덱스로 사용해서 저장한다 그러므로 시간복잡도가 O(..