-
Digital Signature and Nonce Reuse
서론 Digital signature, 혹은 디지털 서명은 컴퓨터 네트워크에서 빠져서는 안 될 중요한 요소 중 하나이다. 수신자는 발신자로부터 메시지를 수신한 뒤, 메시지에 같이 붙어 온 digital signature를 검증해 해당 메시지가 정말로 발신자로부터 온 것인지 확인할 수 있다. 이를 보장할 수 있는 근간에는 다양한 수학 이론이 깔려있고, 이 중 중심이 되는 것은 정수론과 타원 곡선이라고 할 수 있다. 오늘 이 포스트에서는 이 중에서도 가장 쉽게 이해할 수 있고 널리 쓰이고 있는 DSA에 대해서 알아보고, nonce reuse가 왜...
-
Red Army 1
안녕하세요, 반갑습니다. 소프트웨어 멤버십 블로그에 글을 쓰는 것은 처음이네요. 서울대학교의 Problem Solving 동아리 SNUPS에서 봄학기동안 열린 스터디 red army에서 선별한 문제 풀이를 연습하던 중, 재미있는 문제가 몇 개 있어 문제와 풀이, 그리고 풀이 코드를 소개하려 합니다. 모두 코드포스(https://codeforces.com/)에 수록된 문제이며, div1 C 정도의 난이도입니다. Cutting Rectangle Thinkoff Internship Warmup Round 2018 and Codeforces Round #475 Div.1의 C번입니다. (https://codeforces.com/contest/963/problem/C) 가로 길이가 A, 세로 길이가 B인 직사각형이 하나 있습니다. 이 직사각형을 가로로 몇 번, 세로로 몇 번...
-
Google Test와 gcov 소개
이 글에서는 Google Test를 이용하여 간단한 c++ 유닛 테스트 코드를 작성해보고 이후 gcov를 이용하여 코드 커버리지를 측정하는 방법에 대해서 다뤄보겠습니다. 유닛 테스트란? 유닛 테스트는 특정 모듈(함수 or 특정 코드)이 내가 원하는 바 대로 정확히 작동하는지 검증하는 절차입니다. 즉, 모든 함수와 메소드에 대한 테스트 케이스를 작성하는 절차를 말합니다. 우리는 이를 자동화하고 반복할 수 있게 하여 코드가 수정되어 문제가 발생하였을 경우에 이를 빠르게 찾고 수정할 수 있도록 해주고, 유닛 테스트를 통과했다면 해당 모듈이 잘 작동하고 있음을 확신하고...
-
SHA-256 구현
안녕하세요. 오늘은 SHA-256 알고리즘에 대해 간단하게 설명하려고 합니다~ 이 포스팅에서는 SHA-256 의 수학적인 원리나 구현 최적화 기법에 대해서는 다루지 않습니다. 설명을 위해 최소한으로 작성한 C++ 코드를 통해 SHA-256 의 내부 로직이 어떻게 구성되어 있는지 가볍게 알아보도록 하겠습니다. » 이 글을 좀 더 좋은 가독성으로 읽기 « SHA-256 이란? 해시 함수중에 하나로서, 해시의 결과가 256bit 입니다. SHA 해시 함수 모음에 속하고 대중적으로 널리쓰이는 해시 함수중에 하나입니다. 특히 최근에는 비트코인을 비롯한 많은 블록체인 시스템에서 SHA-256 을 주로...
-
Kudeki Chain과 CUDA Programming
목차 개요 Data Parallelism GPU 구조 Kudeki Chain 문제 설명 CUDA 프로그래밍 방법 최종 코드 마무리 참고 자료 개요 몇 달 전에 Kudeki Chain이라는 문제를 GPU를 사용해서 풀어보았다. 풀이를 간략하게 정리해서 개인 블로그에 포스팅을 했는데, 생각보다 GPU에 관심있는 독자가 많았다. 그래서 이번에는 GPU와 CUDA 프로그래밍에 대해 포스팅을 작성하여 내용을 공유하고자 한다. Data Parallelism Data Parallelism은 다른 데이터들에 대해 동일한 연산을 한 번에 계산하여 프로그램의 실행 시간을 줄이는 방법이다. 배열 A와 B를 더하고, 그 결과를 배열...