본문 바로가기
728x90

전체 글47

6화 - 타원 곡선 1. 타원 곡선이란?타원 곡선 E는 다음과 같은 형태의 수식으로 정의되는 대수 곡선의 그래프 형태이다.타원 곡선 위의 점들에 대한 연산은 이전에 알던 일반적인 연산 체계와는 다른 방식입니다. 타원 곡선을 이용하여 ECC 디피-헬먼과 같은 암호화 체계가 개발되었습니다.2. 정수 계(mod 5)에서의 타원 곡선곡선 $y^2 = x^3 + 2x + 1 (\bmod 5)$가 존재할 때, 가능한 x는 {0, 1, 2, 3, 4}입니다.각각에 대해 $y^2$ 값을 계산하고 mod 5에서 제곱근이 존재하는지 확인합니다.x$y^2 = x^3 + 2x + 1 (mod 5)$가능한 y00 + 0 + 1 = 11, 4 ($1^2 = 1$, $4^2 = 16 = 1 mod 5$11 + 2 + 1 = 42, 3 ($2^2=4$.. 2025. 7. 31.
5화 - 공개키 암호 1. 공개 키 암호공개 키 암호 시스템은 서로 다른 두 개의 키를 사용합니다. 암호화할때 "공개키"를 사용하고, 복호화할때 "비밀키"를 사용합니다.대칭키 암호의 가장 예민한 문제인, 대칭키를 안전하게 배분하는 것을 해결할 수 있습니다. 하지만 공개키 암호도 완벽하진 않습니다. 대표적인 공개 키 암호 시스템으로 RSA, ECC 등이 있습니다.2. 개인키와 공개키공개키는 누구나 접근 가능한 형태로 공개되어 메시지를 암호화하는 데 사용되며, 개인키는 사용자 본인만이 가지고 있어 암호화된 메시지를 복호화하는 데 사용됩니다. 개인키는 철저히 비밀로 유지되어야 하며, 공개키와 개인키는 수학적으로 연관되어 있으나, 공개키에서 개인키를 유추하는 것은 매우 어렵게 설계되어 있습니다. 대칭 키 암호공개 키 암호키의 형태암.. 2025. 7. 30.
4화 - 대칭키 암호 대칭키 암호는 암호학에서 가장 널리 사용되는 암호화 방식 중 하나로, 암호화와 복호화 과정에 동일한 키를 사용하는 암호체계입니다. 대칭키 암호의 핵심은 "암호문을 생성(암호화)할 때 사용하는 키"와 "암호문으로부터 평문을 복원(복호화)할 때 사용하는 키"가 동일하다는 점입니다. 이 방식은 전통적인 암호화 기술로, 암호화와 복호화가 동일한 방식으로 이루어져 빠르고 효율적입니다.대칭키 암호는 스트림 암호와 블록 암호로 두 가지로 나눌 수 있습니다. 각각은 서로 다른 방식으로 데이터를 암호화하지만, 둘 다 대칭키 암호화 시스템의 일종으로 분류됩니다.1. 스트림 암호 (Stream Cipher)스트림 암호는 전통적인 일회성 암호 (One-Time Pad)와 개념적으로 유사한 방식입니다. 일회성 암호에서는 각 비.. 2025. 7. 29.
3화 - 암호 알고리즘의 핵심 원리 1. 랜덤성(Randomness)무작위성 또는 랜덤성은 "사건에 패턴이나 예측 가능성이 없음"이라고 설명될 수 있습니다.1-1. 무작위 비트열각 비트가 0또는 1이 아닌 확률로 1과 0으로 결정된 비트열을 무작위 비트열이라고 말할 수 있습니다.그렇다면 비트열 "1011110" 과 "0000000" 중에서 어떤 비트열이 무작위 비트열이라고 주장할 수 있을까요?1-2. 무작위에 대한 오해무작위성은 대상이 무작위해 보인다고 해서 그것이 무작위하게 생성되었다고 볼 수 없으며, 비무작위해보인다고 해서 이를 비무작위하다고 말할 수 없습니다.우연히 발생한 패턴으로 인해 무작위성 또는 비무작위성을 잘못 판단할 가능성이 존재하기 때문입니다.1-3. 균등 분포와 비균등분포확률 변수가 특정한 값을 가질 확률을 확률 분포라고.. 2025. 7. 29.
2화 - 고전 암호 1화 링크 https://woojin1354.tistory.com/78이전 화에서는 정보보안 기본 요소, 암호 용어, 암호학 원칙 그리고 고전 암호인 단순 치환 암호에 대해 다루었습니다.이번 화는 더 많은 고전 암호 체계들에 대해 다루며, 암호를 해석하기 위한 유명한 기법들을 하나씩 살펴보겠습니다.1. 이중 전위 암호이중 전위 암호는 평문을 주어진 크기의 행렬 형태로 배열한 뒤, 주어진 키에 맞춰 행과 열을 교환하는 방식을 사용합니다.1-2. 이중 전위 암호 예시유명한 예시를 통해 살펴보겠습니다. "attackatdawn"이라는 평문을 이중 전위 암호 방식으로 암호화하기 위해 4X3 행렬로 행렬화를 진행하겠습니다.attackatdawn위 표에서 행번호 (1, 2, 3, 4)를 (4, 3, 2, 1)로 섞.. 2025. 6. 29.
1화 - 암호화 오늘날 우리는 다양한 디지털 시스템 속에서 암호화된 통신을 사용하고 있습니다. 이번 글에서는 암호학의 기초 개념부터 고전 암호, 암호 해석 방법, 역사적 사례, 현대 암호 기술까지 전문적인 관점에서 살펴봅니다.1. 정보보안 기본 요소암호학에 대해 배우기에 앞서 정보보안 핵심 원칙인 정보보안 3요소 CIA에 대해서 살펴보겠습니다.1-1. 기밀성 (Confidentiality)승인되지 않은 사람이 정보를 열람할 수 없게 한다.정보를 아주 중요한 비밀로 취급하여 남에게 정보를 알리지 않고 숨깁니다.정보 보안에서 정보는 기본적으로 남(외부인)이 함부로 볼 수 없어야 합니다. 그러므로 어떠한 시스템이 인가된 사용자만 정보에 접근할 수 있다면 기밀성이 높다고 말합니다.기밀성을 위협하는 형태로 정보 유출이 대표적이며.. 2025. 6. 8.
스택, 큐(Queue)란? 컴퓨터 과학에서 중요한 자료 구조인 스택(Stack)과 큐(Queue)에 대하여 알아보겠습니다.1. 스택(Stack)이란?스택(Stack)이라는 단어에 대해서 먼저 살펴보겠습니다. 스택(Stack)은 깔끔하게 정돈된 무더기를 말합니다. 예를 들어"a stack of books"라고 하면 책 한 무더기라는 뜻입니다.위 그림에서 검은 책, 갈색 책, 흰 책 이외에 여러 책들이 쌓여 있는 모습을 볼 수 있습니다. 위 그림처럼 책을 쌓기 위해서는 검은 책, 갈색 책, 흰 책 순서로 책을 쌓아야 합니다. 하지만 책을 사용하려 한다면 위에서부터 한 권씩 꺼내야 하기에, 제일 먼저 쌓았던 검은 책이 가장 마지막에 꺼내집니다. 책 한 무더기에서 먼저 들어간 책이 나중에 나오는 것과 동일하게 작동하는 것이 스택(Stac.. 2024. 9. 20.
[초보자를 위한 파이썬] 7화 - 응용하기 지금까지 변수, 입출력, 조건문, 반복문에 대해 살펴보았습니다.이번에는 이를 이용하여 예시 문제 상황들을 해결하는 소스코드를 작성해 보겠습니다.1.  간단한 상황에 대한 예제어떤 수가 더 큰 수일까요?5와 3 중에서 어떤 수가 더 큰 수인가요? 정답은 5가 더 큰 수입니다.이처럼 2개의 수가 주어졌을 때, 더 큰 수를 찾는 프로그램을 작성하려 합니다.우선 "2개의 수가 주어졌다"라고 하였으니, 2개의 수를 입력받아야 합니다.하지만 2개의 수가 주어지는 방식에 따라서 입력되는 방법이 다릅니다.2개의 수가 한 줄로 주어지는 경우, 예를 들어서5 3위와 같은 방식으로 수가 주어지는 경우에는 input()을 통해 한번에 두 수를 입력받아야 합니다.하지만 이는 문자열(string)형이며, 실제로는 "5 3"으로,.. 2024. 9. 15.
트리란? 1. 트리란?1-1. 예시로 살펴보기트리를 간단한 예시 상황으로 이해해 보겠습니다.할아버지, 할머니, 아들, 딸, 며느리, 사위, 손자, 손녀로 이루어진 집안의 가계도를 그림으로 나타내고자 합니다.가계도를 그릴 때는 일반적으로 세대별로 정리하여 그립니다.예를 들면, 할머니와 할아버지는 같은 세대로 묶을 수 있습니다.아들, 딸, 사위, 며느리 또한 같은 세대로 묶을 수 있습니다.손자와 손녀 또한 같이 묶을 수 있습니다.가계도에서 세대를 나누는 기준은 혈연관계나 결혼을 통해 연결된 인물들이 동일한 세대에 속하는지 여부에 따라 구분됩니다. 예를 들어, 형제자매는 부모 세대에 속한 인물들의 자녀이므로 동일한 세대에 묶이며, 그들의 자녀들은 한 단계 아래 세대인 손자 세대로 묶입니다. 이 방식은 가계도에서 세대 .. 2024. 9. 14.
[초보자를 위한 파이썬] 6화 - 반복문 이번에는 특정한 동작을 반복해서 시행하도록 만들어주는 반복문에 대해 다뤄보겠습니다.반복문은 같은 작업을 여러 번 반복해서 실행할 때 사용하는 프로그래밍 도구입니다.예를 들어, 어떤 일을 여러 번 해야 할 때, 매번 똑같이 코드를 적는 대신, 반복문을 사용해서 그 작업을 자동으로 여러 번 할 수 있습니다.파이썬에서는 주로 while문(while statement) 또는 for문(for statment)을 반복문으로써 사용합니다.반복문을 사용하는 이유만약 "Hi"라는 문자열을 10번 출력(print)하려면 지금까지는 아래와 같이 코드를 구성해야했습니다.print("Hi")print("Hi")print("Hi")print("Hi")print("Hi")print("Hi")print("Hi")print("Hi").. 2024. 9. 4.
[초보자를 위한 파이썬] 5화 - 조건문 조건문은 프로그래밍에서 일어나는 "선택의 게임"과도 같습니다. 마치 삶의 갈림길에서 우리가 매 순간 선택을 하듯이, 프로그래밍에서도 조건에 따라 다양한 선택을 합니다. 가령, "오늘 점심으로 무엇을 먹을까?", "이 길로 가면 어떤 모험이 펼쳐질까?"와 같은 결정들이 그렇습니다. 이제 조건문을 통해 어떻게 적절히 사용할 수 있을지 살펴보겠습니다.논리 연산이란?참(True)과 거짓(False)의 값들을 사용하여 조건이나 명제를 결합하거나, 특정 조건의 논리적 참/거짓 여부를 판별하는 연산을 의미합니다.우선 간단히 논리 연산들의 종류와 연산 결괏값에 대해서 살펴보겠습니다.파이썬에서 논리 연산자는 `and`, `or`, `not` 세 가지가 있습니다. 이들은 불리언(bool) 값을 반환하는데, 그 동작은 다음.. 2024. 9. 1.
[초보자를 위한 파이썬] 4화 - 예제 문제 문제객관식 문제1. 변수에 값을 할당할 때 Python에서 타입을 미리 지정해야 하는가?a) 예 b) 아니오2. 다음 중 Python에서 문자열을 반복하는 방법은?a) + b) * c) - d) /3. print(10 % 3)의 출력 결과는?a) 0 b) 1 c) 2 d) 34. Python에서 논리 연산자 중 AND 연산을 나타내는 것은?a) & b) | c) and d) or5. 다음 중 문자열의 길이를 구하는 함수는?a) length() b) size() c) count() d) len()주관식 문제1. Python에서 정수형 변수 a에 값 5를 할당하는 코드를 작성하세요.2. Python에서 문자열 Python을 3번 반복하여 출력하는 코드를 작성하세요.3. 두 변수 x와 y에 대해 x가 y보다 .. 2024. 8. 31.
[초보자를 위한 파이썬] 3화 - 입출력 현대에 사용되는 대부분의 프로그램은 사용자 입력에 대한 결과를 출력합니다. 이번에는 파이썬에서의 입력과 출력에 대해 다뤄보겠습니다.1. 입력파이썬의 입력은 주로 input() 또는 sys 모듈에 있는 readline()을 많이 사용합니다. 이번에는 input()을 위주로 설명하겠습니다.input()input()은 사용자가 입력한 내용을 문자열(string)형태로 반환합니다.예를 들어, 사용자 입력을 A라는 변수에 할당하려면 다음과 같이 사용합니다.A = input()만약, 사용자가 "ABC"라고 입력하게 된다면 input() 부분은 "ABC"로 대치됩니다(="ABC"로 바뀌어 놓입니다).숫자형 입력input()은 문자열 자료형입니다. 형변환을 통해 정수형(int) 또는 실수형(float)으로 변환할 수 .. 2024. 8. 31.
[초보자를 위한 파이썬] 2화 - 변수, 자료형 1. 변수란?변수(Variable)는 간단히 말하자면 데이터를 저장할 수 있는 공간입니다. 더 엄밀히 말하자면 장치(컴퓨터)의 메모리에 데이터를 저장할 공간을 할당(allocation)하는 것을 말합니다.파이썬에서 변수는 변수명과 값(value)으로 이루어지며, 값에 이름(변수명)을 붙여서 사용합니다.아래는 정수형(int) 값인 10에 "N"이라는 이름을 붙인 변수 "N"을 만드는 예시입니다.N = 10이렇게 변수를 만드는 것을 "변수 선언"이라고 합니다.파이썬에서 기본적으로는 어떤 종류의 값을 저장할지 미리 알려주지 않아도 됩니다. 파이썬이 실행되는 시점에서 어떤 종류의 값인지를 결정하기 때문입니다.하지만, 필요에 따라서 어떤 종류의 값인지를 알려주기도 합니다.아래는 정수형(int) 값인 10에 "N".. 2024. 8. 31.
[초보자를 위한 파이썬] 1화 - 소개 및 설치 0. 초보자를 위한 파이썬 소개이 자료는 프로그래밍 초보자들을 위하여 작성되었습니다.가능한 많은 내용을 정확하게, 그리고 쉽게 전달하고자 합니다.초보자를 위한 파이썬을 접하는 독자들에게 3가지 주의사항을 알려드리겠습니다.외우기보단 이해가 우선입니다.내용을 암기하는 것도 중요하지만, 이해하지 못한 내용을 억지로 외우려고 하지 않았으면 좋겠습니다.이해가 안 된다면 일단 넘어가도 좋습니다.짧은 시간에 모든 내용을 완벽하게 이해하기는 어렵습니다. 현재 이해가 되지 않는 내용에 집착하면 프로그래밍 학습이 고통으로 다가올 수 있습니다. 다만, 어렵다는 이유로 고민 없이 그냥 넘어가라는 뜻이 아닙니다. 내용을 정독하고 이해하려는 노력을 하였음에도 이해가 안 되는 경우에 다음 내용으로 넘어가기를 권하는 것입니다.배운 .. 2024. 8. 30.
[백준 2168번] 타일 위의 대각선 - C++ 풀이 https://www.acmicpc.net/problem/2168(백준 문제 링크)1. 문제 설명문제한 변의 길이가 1cm인 정사각형 모양의 타일이 있다. 이 타일들을 가로가 xcm, 세로가 ycm인 직사각형 모양의 벽에 빈틈없이 붙였다. x와 y는 정수이다.이 직사각형에 하나의 대각선을 그렸다. 직사각형에 붙어 있는 x*y개의 타일 중에는 대각선이 그려진 타일도 있고, 그렇지 않은 타일도 있다. x*y개의 타일 중에서 대각선이 그려져 있는 타일의 개수를 구하는 프로그램을 작성하시오.2. 풀이가로가 3, 세로가 2인 벽에 타일을 붙이면 아래 그림과 같습니다.처음 시작된 격자에서 선이 진행되다가 격자와 격자 사이 경계선에 다다르면 새로운 영역(타일)으로 나가는 것이 되며, 해당 영역(타일)에도 선이 그어지.. 2024. 8. 28.
복잡도(Complexity)란? - 시간 복잡도 1. 등장 배경1-1. 연산의 난이도컴퓨터와 관련된 문제는 다양한 형태로 발생합니다. 이는 간단할 때도 있고, 때론 복잡할 때도 있습니다.예를 들어, 정렬 문제(Sorting Problem)는 간단한 편에 속합니다. 나열된 숫자들을 오름차순으로 정렬하게 될 일이 생겼다고 가정하겠습니다. 그리고 이를 스케쥴링 문제(Scheduling problem)와 비교해봅시다. 예를 들어, 학교 전체 정원에 대하여 학교 규정과 학생의 요구 등이 포함된 제한 사항(Constraint)들이 적용된 반 편성 문제를 생각해봅시다. 이 두가지 문제를 비교해보니 스케쥴링 문제가 정렬 문제보다 보기에 훨씬 더 복잡해 보입니다. 학생의 수 또는 학교의 규모가 커질수록 이 스케쥴링 문제를 해결하는 난도는 기하급수적으로 증가합니다.여기.. 2024. 8. 24.
DFS란? 1. DFS 기본 개념DFS(Depth-First Search, 깊이 우선 탐색)은 그래프나 트리 같은 자료구조에서 사용되는 탐색 알고리즘 중 하나로, 가장 깊은 노드까지 탐색한 후, 다시 돌아와서 다른 경로를 탐색하는 방식으로 작동합니다. DFS는 트리의 모든 노드를 방문하거나, 그래프의 모든 정점을 탐색할 때 사용됩니다. DFS는 다양한 문제 해결에 적용되며, 알고리즘 자체는 재귀(Recursive)적 구조나 스택(Stack) 자료구조를 통해 구현할 수 있습니다.백트래킹(Backtracking)의 원리를 응용하는 알고리즘이기에 백트래킹에 대해 먼저 공부하고 오면 이해하기 쉽습니다.백트래킹에 대한 설명글 링크는 하단에 남기겠습니다.https://woojin1354.tistory.com/40 백 트래킹(.. 2024. 8. 23.
728x90