본문 바로가기
728x90
반응형

분류 전체보기274

암호에 대한 이해 - RSA RSA Encryption에 대해서 공부해 봅시다~ ● 사용자 public key(n,e) 임의의 두 소수 p,q의 곱으로 이루어진 합성수 n만 공개를 하고 어떤 p,q로 곱해져있는지 절대로 공개하면 안됩니다. (p-1)(q-1)의 서로소인 아무거나 e를 공개키로 합니다. ● 사용자 private key(n,d) d를 구하려면 e는 공개된 값이고 은 multiplicative group이기 때문에 역원이 존재합니다. d는 mod (p-1)(q-1)상에서 역원만 구하면 되는데 p,q를 알아야 구할 수 있습니다. p,q만 알면 이미 알려진 e의 역원 구하는 것은 쉽습니다. 따라서 n에 대한 p,q를 아는 사람만 비밀키를 구할 수가 있습니다. 그러면 비밀키의 안정성은 결국 현재 n을 구성하는 p,q가 무엇인 .. 2017. 12. 8.
암호에 대한 이해 - Elgamal Elgamal Encryption 부터 공부해 봅시다. ● 사용자 public key(Y) P : prime number를 임의로 선택합니다. 그래야 P보다 작은 G : generator를 고를 수 있기 때문이죠. mod p 이고, 어떤 g, p를 사용해서 내 공개키는 뭐다 알려주면 됩니다. (alice와 bob이 같은 Y여도 상관 없습니다. 어떤 p,어떤 g를 사용했는 지만 알려주면 됩니다.) ● 사용자 private key(x) x는 P보다 작은 어떤 임의의 자연수이기만 하면 됩니다. 공개키가 노출된다고 하더라도 x는 알 수 없습니다.(DLP 기반) 정수론에서 "subgroup의 차수가 원래 group의 차수와 같아야 한다"가 굉장히 중요하다고 했습니다. 그 이유는 뭘까요? generator는 항상 .. 2017. 12. 8.
암호에 대한 이해 - 비대칭 암호 알고리즘 비대칭 암호화 방식은 (Diffie-Hellman)이 위에서 콜라를 마시다 아래층으로 내려가면서 번뜩이는 아이디어로 처음에 어떻게 하면 둘 사이에 키를 쉽게 관리할 수 있을까 키 분배에 대한 문제를 해결하다가 생각해냈습니다. 모든 사람은 딱 한 쌍의 키(공개키,비밀키)를 갖고 있으면 됩니다. 공개키는 누구나 다 알 수 있도록 오픈하는 키, 비밀키 또는 개인키는 나만 알고 있는 키입니다. 암호화는 누구나 할 수 있어야 되기 때문에 Bob의 공개키로 암호화하고 암호화한 키와 한 쌍인 Bob의 개인키로만 복호화 할 수 있습니다. 키 관리가 굉장히 쉬워집니다. 비밀로 유지해야 하는 건 자신의 비밀키뿐입니다. 하나정도는 안전하게 유지할 수 있습니다. 대칭키의 문제를 바로 해결할 수 있습니다. 하지만 어떻게 구현할.. 2017. 12. 8.
암호에 대한 이해 - 대칭키 암호 알고리즘 암호는 평문(plaintext)를 키를 이용해 암호화(Encryption)시키면 암호문(ciphertext)가 되고 또 키를 이용해서 복호화(Decryption)시키면 평문이 됩니다. 정보 은닉이란 말로 스테가노그래피가 있습니다. 이는 실제로 전달하고자 하는 정보 자체를 숨기는 것입니다. '덮다'는 뜻의 그리스어 '스테가노스'와 '쓰다'라는 뜻의 '그라페인'이 합쳐진 말입니다. 전치법은 단순히 메시지에 있는 문자의 위치를 바꾸는 방법으로 일정 굵기의 봉에 종이를 두르고 여기에 전달하고자 하는 문장을 쓴 뒤 종이를 풀어 전달 후, 이때 봉의 굵기를 함께 알려 줍니다. 종이를 받은 사람은 이를 같은 굵기의 봉에 두른 후 암호문 해석을 합니다. 암호화 알고리즘은 종이를 봉에 두르는 것이고 키는 봉의 굵기가 되.. 2017. 12. 8.
코드 보안 - 포맷 스트링(2) 저번 글에 이어서 메모리에 쓰기를 어떤 포맷스트링을 사용하면 되는지 부터 공부해보겠습니다~ %n이라는 포맷스트링이 바로 메모리에 쓰기가 가능한 포맷스트링입니다. #include int main() { int val; printf("blah %n blah\n",&val); printf("val = %d\n",val); return 0; } %n은 메모리에 쓰는 것이기 때문에 얘랑 짝꿍이 되어야 되는 것은 반드시 데이터가 쓰여질 메모리의 주소여야 합니다. 주소가 와야되기 때문에 &val은 val이라는 변수의 주소값이 온 것입니다. %n을 만나기 전까지 화면에 출력된 글자의 갯수를 val에 저장을 하란 의미입니다. 총 5글자입니다.(b,l,a,h,blank) 5라는 값이 val변수에 저장이 된다는 겁니다. 원.. 2017. 12. 6.
코드 보안 - 포맷 스트링(1) ● 코드 보안 - 버퍼 오버플로우 공격 - 포맷 스트링 공격 포맷 스트링 공격에 대한 보안을 공부해 보도록 하겠습니당~ printf문에서 %로 시작하고 메모리에 저장된 이진 코드 값을 사람들이 읽을 수 있는 값으로 변경합니다. 포맷 스트링에 사용된 문자에 따라서, 출력형태가 결정이 되는데 일반적으로 %d는 정수형 10진수 상수로 해당하는 문자를 출력하고, %c는 문자 값을 출력하는 등등 매개변수에 따라 변수 형식이 다양합니다. %d,%f,%c,%s...이런 것들은 출력과 관련된 것들로 메모리에 있는 값들을 화면에 보여주는 용도 입니다. 그런데 이걸 가지고 어떻게 메모리 조작이 가능할까요? 놀랍게도 잘 쓰진 않지만 %n이라는 것이 있습니다. %n은 지금까지 화면에 출력된 글자 수를 count해서 그 글자 .. 2017. 12. 5.
암호를 이용한 전자상거래 - 전자 화폐 현금의 가장 큰 장점는 익명성과 양도성입니다. 내가 어디가서 무엇을 사던지 어떻게 쓰던지 기록이 남지 않습니다. 그리고 지갑에서 만원을 꺼내서 누구를 주면 그 만원의 소유주가 바뀝니다. ●전자화폐 -David Chaum이라는 사람이 현금과 같은 기능을 갖는 디지털 코인 -'현금의 익명성과 양도성을 모두 갖게 만들자' -검은 세력들이 추적이 불가능한 돈을 쌓으려고 하는게 목적이 되어서 사장이 되었다가 최근 '비트코인' 암호화폐 또는 가상화폐로 다시 전자화폐 등장 ●전자 화폐 분류 -스마트 카드, IC 형태 - 충전식 -네트워크 형 전자화폐 -전자 지갑 -네트워크 형+전자지갑 ●전자화폐 - 보안 요구 사항 -안정성(unforgeability) 위조 불가능성(화폐를 위조 할 수 있어서는 안됨) -이중 사용 방.. 2017. 12. 3.
728x90
반응형