본문 바로가기

728x90

금융보안

(16)
[파일] 태영호 영사 사진에 숨겨진 '주소추적보고' 아래 사진은 런던 AFP 연합 뉴스에서 촬영한 태영호 전영사의 사진으로 224 × 264 픽셀을 가지고 있다. 만약, 북에서 '주소추적보고'라는 메시지를 이미지에 심는다는 가정하에 코드를 만들어보도록 한다. 1) Button1에서 암호가 심어진 사진을 불러온다. 2) Button2(변환)을 누르면 이미지의 가장 우측 열의 값(264개이므로, 0~263개)들이 가지고 있는 픽셀값들이 16진수로 출력된다. 아래는 전체 출력값들 (0~263)들중 0~12까지의 출력값이다. Pixel at (223, 0): #0A1F92 Pixel at (223, 1): #081F8F Pixel at (223, 2): #0C1D91 Pixel at (223, 3): #042292 Pixel at (223, 4): #081C97..
[파일]ROT13, 10대의 암호 ROT13(로테이션 13)은 텍스트 암호화/복호화를 이해하기 위한 간단 암호 기술이다. ROT13은 알파벳을 13자만큼 회전시켜서 텍스트를 변환한다. 예를 들어, "A"를 "N"으로, "B"를 "O"로, "C"를 "P"로 변환한다. 이 기술은 주로 중고장터와 같은 온라인 포럼에서 필요없는 관심을 피하기 위해 사용되기도하고 간단한 메시지를 감추기 위한 용도로 사용된다. ROT13은 단순한 문자 치환 방식이며, 원본 메시지를 손상시키지 않고 쉽게 원래의 메시지로 복원할 수 있다. 예를 들어, "HELLO"를 ROT13으로 암호화하면 "URYYB"가 된다. 반대로 "URYYB"를 ROT13으로 복호화하면 다시 "HELLO"가 된다. 아래 샘플 코드는 C#으로 작성되었다. using System; class P..
[파일]신용 카드 유효성 검사, Luhn 코드 아메리칸 익스프레스(American Express) 카드를 예로 든다. 1. 양각처리 ㄴ American Express 카드 계좌 번호는 양각 처리되어 있다. ㄴ 양각(튀어나오게 만듦)은 음각(파내는 방식)보다 복사하기가 더 어렵다. 2. 고유번호 ㄴ아메리칸 익스프레스 카드는 "3"으로 시작하고 "7" 또는 "4"가 뒤에 온다. ㄴ Visa 카드 번호는 "4"로 시작하고 13자리 또는 16자리 숫자로 구성된다. ㄴ MasterCard는 "5"로 시작하고 16자리 숫자로 구성된다. ㄴ Discover는 "6"으로 시작하고 16자리로 이루어져 있다. ㄴ 숫자 그룹은 4자리씩 4개의 그룹으로 구분되어 있다. ㄴ 아메리칸 익스프레스 카드 번호는 카드 발급자 식별번호(IIN)을 ANSI 표준에 따른다. ㄴ INN..
황금 비율(golden rate), 1.6180339887 신용카드의 가로×세로 비율은? TV나 모니터의 가로×세로 비율은? 고대 그리스나 로마 건축물의 가로×세로 비율은? 유명 미술작품 다윗의 미소(David's Smile)에 표현된 얼굴의 구성 요소간 가로×세로 비율은? 웹 디자인, 그래픽, 제품디자인에서 가장 많이 적용된 가로×세로 비율은? 음악 리듬에서 가장 심리적 안정감을 느끼는 가로×세로 비율은? (물론, 신비감이나 마케팅적인 요소가 들어 있을수도 있다.) 1.618033 황금비율(Golden Ratio)은 수학기호 φ (phi) 또는 Φ (Phi)라는 심볼로 표현되며, 대략 1.6180339887의 값을 갖는다. 두 수 a와 b 사이에서, a를 b로 나눈 값이 a+b를 a로 나눈 값과 같을 때, 이를 황금비율로 표현한다. a / b = (a + b)..
파워-볼 숫자 암호, 1등은 3천만 원 파워볼은 동행복권 사이트에서 5분마다 추첨하는 추첨식 복권으로 1장당 1,000원이다. 1등 기본 당첨금은 3천만원+알파(최고 3억원) 일반볼 5개( 1~28개) + 파워볼 1개 = 총 6개 숫자를 선택하는 게임 using System; namespace LottoNumberGenerator { class Program { static void Main(string[] args) { Random random = new Random(); // 1부터 28까지의 숫자 중에서 5개를 랜덤하게 선택 int[] mainNumbers = new int[5]; for (int i = 0; i < 5; i++) { mainNumbers[i] = random.Next(1, 29); // 1 이상 29 미만의 숫자 중에서..
린겐 서명 암호, Lattice Signature 린겐 서명은 격자 기반 암호화의 한 형태로 양자 암호화의 한 종류다. privateKey 생성: GeneratePrivateKey 함수는 주어진 크기와 모듈러 값에 따라 무작위 개인키를 생성한다. 개인키의 각 요소는 0부터 q-1까지의 값을 가지게 된다. publicKey 생성: GeneratePublicKey 함수는 개인키와 격자의 차원, 모듈러 값을 사용하여 공개키를 생성한다. 각 공개키 요소는 개인키의 요소들과 함께 계산되는데(이 때 특정한 수식과 계산 방식을 사용한다.). 공개키의 각 요소는 개인키의 요소를 활용하여 계산되며, 이때 격자의 차원에 따라 계산이 이루어진다. 이 과정이 린겐 서명의 핵심적인 계산 과정 중 하나가 된다. 아래 코드는 린겐 서명의 개념을 실험적으로 볼 수 있다. 개념적으로..
5개의 조, 그리고 6개의 번호, 연금복권 오해가 없길 바란다. 아래의 코드는 숫자를 좋아하고 암호에 흥미를 갖는 학생이나 일반인에게 흥미를 가질 수 있도록 만든 프로그래밍 소스 코드다. 실제로 로또나 연금복권의 숫자를 맞출 수 없으며 확률적으로도 불가능에 가깝다. 연금복권은 1,2,3,4,5 중에 1개의 조를 고르고 0,1,2,3,4,5,6,7,8,9를 조합해서 6자리 번호를 선택한다. 로또와는 달리 숫자가 중복될 수 있다. using System; using System.Text; namespace RandomNumberGenerator { class Program { static void Main(string[] args) { Random random = new Random(); // 1부터 5까지의 임의의 숫자 선택 int selected..
로또 번호 6개, 15, 17, 27...... 로또는 45개의 숫자들 중에서 6개 숫자를 선택하고 그 숫자가 추첨되면 상금을 지급받는 복권이다. 로또는 매주 토요일 8시에 추첨된다. 로또 추첨은 무작위로 선택된 숫자 6개가 일치해야 한다. 온라인에서는 5천원 이내의 금액만 구입할 수 있다. 이번 주 로또 추첨을 위해 무작위로 추출되는 로또 번호를 만들어보자. using System; using System.Collections.Generic; namespace RandomNumberGenerator { class Program { static void Main(string[] args) { List numbers = new List(); for (int i = 1; i

728x90