Computer Science

    전송 계층 보안 프로토콜 SSL/TLS

    SSL은 웹 브라우저를 위한 보안 프로토콜로 처음 제안되어 현재 SSL 3.0 버전까지 나왔다. SSL 3.0을 기반으로 표준화한 것이 TLS이다. 통상적으로 SSL과 TLS을 같은 말로 부르는듯하다. SSL/TLS는 클라이언트/서버 환경에서 TCP 기반의 어플리케이션에 대한 종단 간 보안 서비스를 제공하기 위해 만들어진 전송계층 보안 프로토콜이다. 각 애플리케이션 프로토콜이 SSL을 이용할 경우 이를 구분하기 위해 고유한 well-know 포트를 할당한다. 가장 대표적인 예는 아래와 같다. HTTPS(443/tcp) SMTPS(465/tcp) FTPS(990/tcp) TELNETS(992/tcp) SSL/TLS 가 제공하는 보안 서비스 1. 기밀성(Confidentiality) 대칭 암호를 이용한 송수..

    FQDN과 PQDN에 대해 다시 한번 고민하기

    이 글에서 이 주제로 정리를 하였지만, 기억이 잘 안나기도 하고, 다시 공부할 겸 정리를 하려고 한다. 전체 주소 도메인 네임(FQDN, Fully Qualified Domain Name) 최상위 도메인 A의 하위 도메인 B가 있고, B의 하위 도메인 C가 있으면 전체 도메인 네임은 "C.B.A"이다. 특정 도메인의 위치를 정확하게 알려주기 때문에 완전한 도메인 네임이다. 부분 주소 도메인 네임과 구분하기 위해 가장 상위 도메인에 "."을 붙인다. 생략을 할 수 있지만 DNS 마스터 파일에서는 FQDN과 PQDN을 명확하게 구분하기 위해서 생략하지 않는다. 부분 주소 도메인 네임(PQDN, Partially Qualified Domain Name) FQDN이 완전한 도메인 네임이라면 PQDN은 불완전한 ..

    멀티 스레드에 대한 이해 with 자바

    멀티 스레드란? 멀티 스레드란 한 응용 프로그램에 여러 스레드를 갖고 있는 것을 말한다. 스레드는 CPU가 처리하는 작업 단위를 말하며, 따라서 멀티 스레드는 CPU가 주어진 시간 동안 스레드를 전환하며 실행하는 것을 말한다. 만약, CPU의 코어가 여러 개라면 한 응용 프로그램 내에 코드의 다른 부분을 여러 개의 CPU 코어에서 실행할 수 있게 된다. 이를 그림으로 표현하면 아래와 같다. 왜 멀티스레드를 사용할까? 1. 단일 CPU일 때 CPU의 효율을 극대화할 수 있다. CPU의 작업은 매우 비싼 작업이기 때문에 CPU를 잠시라도 쉬게 해서는 안된다. 예를 들어, 한 스레드가 네트워크를 통해 전송된 요청의 응답을 기다리고 있는 상황이라면, CPU도 어떠한 작업을 하지 않고 대기 중이 된다. 이때는 다..

    [Algorithm] 나머지 연산과 페르마의 소정리

    이 문제를 풀며 정리한 것이다. 문제는 아래와 같이 nCr를 P로 나누었을 때, 그 값을 구하는 것이다. 여기서 N의 값이 매우 큰 경우 모듈러의 연산을 통해 분모항과 분자항을 분리해주어야 한다. 1. 모듈러의 연산 1. a mod P + b mod P = (a+b) mod P 2. a mod P - b mod P = (a-b) mod P 3. a mod P * b mod P = (a*b) mod P 모듈러의 연산에서는 나눗셈이 없다. 그래서 분자항을 괜찮지만, 분모항을 어떻게 처리해줘야 할지 고민해야 한다. 분모항을 처리하기 위해 사용하는 것이 페르마의 소정리이다. 2. 페르마의 소정리 a가 3이고, P가 5 일 때, 3의 거듭제곱을 5로 나눈 나머지는 아래와 같은 특징이 있다. 이러한 규칙을 페르마의..

    완전 탐색 - 순열, 중복 순열, 조합, 중복 조합, 부분 집합

    1. 순열(Permutation) 순열 - 서로 다른 n개 중 r개를 순서를 고려하여 선택하는 것 - n = 6, r = 4 이면, P(6, 4) = 6 X 5 X 4 X 3 = 360 - 경우의 수가 11! 이 넘으면 순열로 풀 수 없음(경우의 수: 4억 이상) 코드로 보는 순열 - 원소와 N, R이 주어졌을 때 순열을 구하는 코드 import java.util.Arrays; import java.util.Scanner; public class Test { static int N, R; static boolean[] isSelected; static int[] input, output; private static void permutation(int cnt){ if(cnt == R){ // R개를 뽑았..