ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ciphers
    프로그래밍/정보보호 2021. 3. 18. 01:13
    Ciphers

    Ciphers

    Additive Cipher

    C=(Cipher),P=(PlainText),k=C = 암호화된 문장 (Cipher), P = 평문 (Plain Text), k = 키 값
    C=(P+k)%26C = (P + k) \% 26 P=(Ck)%26P = (C -k)\%26

    One-Time Pad

    Additive Cipher의 고정된 키를 가변 키로 바꾸는 것
    K의 시퀀스를 미리 서로 정해둬야 한다.
    Ci=(Pi+ki)%26C_i = (P_i + k_i)\%26

    Multiplicative Cipher

    C = 암호화된 문장 (Cipher)
    P = 평문 (Plain Text)
    k = 키 값 (곱셈역이 존재해야 함)
    C=(Pk)%26C = (P * k) \%26 P=(Ck1)%26P = (C * k^{-1})\%26

    Affine Cipher

    C = 암호화된 문장 (Cipher)
    P = 평문 (Plain Text)
    k1 = 곱셈 사이퍼의 키 값
    k2 = 덧셈 사이퍼의 키 값
    T=(Pk1)%26T = (P * k_1) \% 26C=(T+k2)%26C = (T + k_2)\%26
    >->
    T=(Ck2)%26T = (C -k_2) \% 26 P=(Tk11)%26P = (T * k_1^{-1})\%26

    Monoalphabetic Cipher

    단일 알파벳 문자를 단일 알파벳 문자로 치환한 표를 갖고 있음

    a b c d e f g h i j k l m n
    N O A T R B E C F U X D Q G

    Statistical attack에 약함

    Statistical Attack

    평문에서의 알파벳의 등장 빈도를 계산해 두고, 암호문에서의 알파벳 등장 빈도와 비교하여 치환해 보며 해독하는 기법

    Autokey Cipher

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12
    Plain text a t t a c k i s t o d a y
    P 00 19 19 00 02 10 08 18 19 14 03 00 24
    Key 12 00 19 19 00 02 10 08 18 19 14 03 00
    C 12 19 12 19 02 12 18 00 11 07 17 03 24
    Cipher text M T M T C M S A L H R D Y

    P’s values: 알파벳을 1~26의 숫자로 치환한 것
    Key stream: 이전 P’s value
    C’s values: P’s value와 Key를 더한 것

    Ci=(Pi+ki)%26C_i = (P_i + k_i)\%26 Pi=(Ciki)%26P_i = (C_i-k_i)\%26

    Playfair Cipher

    L G D B A
    Q M H E C
    U R N I/J F
    X V S O K
    Z Y W T P

    평문을 encrypt하려면 두 글자씩 나눠서 encrypt
    hello의 경우 같은 두 글자 ll이 있으므로 해당 ll 사이에 미리 설정한 글자 (ex: x)를 넣어 helxlo로 만들어 둠

    he -> EC

    두 글자가 같은 가로줄에 있으면 각 글자를 오른쪽으로 한 칸씩 이동한다.

    lx -> QZ

    두 글자가 같은 세로줄에 있으면 각 글자를 아래쪽으로 한 칸씩 이동한다.

    lo -> BX

    그 외에는 두 글자가 이루는 직사각형에서의 반대편 row의 글자로 바꾼다.

    decryption은 열심히 역연산해보자

    Vigenere Cipher

    autokey cipher에서 key 값만 미리 설정한 문장으로 바꾸면 됨

    key가 "PASCAL"일 때 15 00 18 02 00 11 의 키 값을 반복해서 넣어줌

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13
    Plain text s h e i s l i s t e n i n g
    P 18 07 04 08 18 11 08 18 19 04 13 08 13 06
    Key 15 00 18 02 00 11 15 00 18 02 00 11 15 00
    C 07 07 22 10 18 22 23 18 11 06 13 19 02 06
    Cipher text H H W K S W X S L G N T C G

    Hill Cipher

    행렬곱을 이용

    C=PKC = P * K

    plain text: “code is ready”
    m = 4 일 때

    K=[k11k12k13k14k21k22k23k24k31k32k33k34k41k42k43k44]=[09071113040705060221140903232108]K=\left[\begin{array}{rrr}k_{11}&k_{12}&k_{13}&k_{14}\\k_{21}&k_{22}&k_{23}&k_{24}\\k_{31}&k_{32}&k_{33}&k_{34}\\k_{41}&k_{42}&k_{43}&k_{44}\end{array}\right] = \left[\begin{array}{rrr}09&07&11&13\\04&07&05&06\\02&21&14&09\\03&23&21&08\end{array}\right]
    P=[021403040818170400032425]=[codeisreadyz]P=\left[\begin{array}{rrr}02&14&03&04\\08&18&17&04\\00&03&24&25\end{array}\right] = \left[\begin{array}{rrr}c&o&d&e\\i&s&r&e\\a&d&y&z\end{array}\right]
    마지막 z는 칸을 맞추기 위한 쓰레기 값
    C=(PK)%26=[140710130807061111081818]=[OHKNIHGKLISS]C = (P * K)\%26 = \left[\begin{array}{rrr}14&07&10&13\\08&07&06&11\\11&08&18&18\end{array}\right] = \left[\begin{array}{rrr}O&H&K&N\\I&H&G&K\\L&I&S&S\end{array}\right]

    decryption
    P=(CK1)%26P = (C * K^{-1})\%26
    따라서 K는 역행렬이 존재해야 한다.

    Transposition Cipher

    글자들의 순서를 바꾸는 암호 방식

    Keyless Transposition Cipher

    “Meet me at the park”
    [meetmeatthepark]\left[\begin{array}{rrr}m&e&e&t\\m&e&a&t\\t&h&e&p\\a&r&k&\end{array}\right]
    에서 세로로 읽기

    Keyed Transposition Cipher

    key가 순열로 주어짐
    key = (3 1 4 5 2)
    해당 위치의 글자로 바꾸면 C가 됨
    enemy -> eemyn

    Double Transposition Cipher

    여러 Transposition Ciphers들을 결합하여 더 강력한 암호문을 만들 수 있음

    현대 암호문들은 대부분 Substitution + Transposition Cipher 형태임

    Stream Cipher

    입력이 스트림으로 들어오기 때문에 키도 스트림, 출력도 스트림이어야 함
    Vigenere Cipher, Autokey Cipher 등이 Stream Cipher임

    Block Cipher

    여러 글자를 (블록 단위를) 동시에 암호화하는것
    Hill Cipher 등…

    댓글

Designed by Tistory.