게임강의

[비베] 자동키암호화법

컨텐츠 정보

본문


자동키암호화는 다른 암호화 방식과는 다르게 키가 따로 필요없어요.



문자열들의 상관관계속에서 자동으로 키가 생성되요.



그래서 "자동키암호화" 라고 부르는거에요.



 



구지 따지자면, 초기값을 설정해주기 위한 키가 하나 있지만



그 키는 암호문에 별다른 영향을 주지 못해요.



 



말로만 설명하니까 쉬운것도 어려워보이네요;;



 



그래서 표로!!!





 




a









e



















0





















10 



11 



12 



 n 



























13



14 



15 



16 



17 



18 



19 



20 



21 



22 



23 



24 



25 


 



우선 위의 표는 알파벳을 숫자로 나타내본거에요.



암호학에서는 기본적으로 알파벳을 숫자로 치환해서 사용해요~



 



자, 이제 아래표를 보아요~



 




평문(알파벳)



l



o



v



e



평문(숫자)



      11



14 



21



4



키값



5(초기값)



11 



14 



21 



암호문(숫자)



16



25 





25 



암호문(알파벳) 



q



z






 



이 표는 암호화 과정을 나타낸 표에요.



평문 "love" 를 암호화 했더니 암호문 "qzjz" 가 된거에요.



 



무엇보다도 여기서 키값이 어떻게 정해지는지가 중요해요!!!



아마 잘 보면 규칙을 발견할 수 있어요.



키값 5는 초기값으로 사용자가 직접 설정해줘야되요.



그리고 나머지 키값들은 자동으로 결정되요.



다음 단계 키값은 이전 단계 평문(숫자)값이 된다는 것을 알 수 있어요.



이렇게 처음을 제외한 모든 키값은 자동적으로 정해져요.



 



그리고 이 키값을 이용해서 암호문을 만들수 있어요.



 



위 표에서 알파벳의 암호화 방식은



(평문(숫자) + 키값) mod 26 = 암호문(숫자)



이에요.



 



예를들어, 알파벳 "l" 의 경우



 



(11+5) mod 26 =16



 



이렇게 계산할 수 있고, 여기서 암호문자의 값은 16이되요.



16을 알파벳으로 치환하면 "q" 가 나와요.



 



알파벳 "l" 말고 "o", "v", "e" 에대해서도 똑같은 방식으로



암호문자를 구할 수 있어요.



 



 



 



어때요?ㅎ 별로 안 어렵지요?



자동키암호화는 방법이 간단한대비해서 보안성이 좋아요.



 



"love" 를 암호화 한  "qzjz" 문자열을 보면



"z" 가 두 번 나왔어요.



분명 "love" 속의 문자 중 같은 문자는 없는데



암호문에는 "z"가 두 번 나온거죠.



이것은 빈도수를 이용한 어택을 방어할 수 있다는 것을 의미해요.



 



물론 취약점 또한 존재해요.



단순히, 앞뒤 문자관의 상관관계를 이용해 키를 생성하다보니



만약 공격자가 그 관계를 알아낸다면 암호가 쫘르륵 다 풀려버릴 수가 있어요.



 



 



 



이제 자동키암호화 방식을 vb6.0 코딩으로 표현해볼게요.



 



 



'---------------------------------------



'@Producted By Jiho



'프로그램명 : 자동키암호화 & 복호화



'제작일     : 2013.09.08



'---------------------------------------



 



'자동키암호화 함수



Public Function AutoKeyEncryption(M As String)



 



Dim i As Long



Dim C As String



Dim temp As Long



Dim first As Long



 



'첫번째 키값 임시저장



temp = Asc(Mid(M, 1, 1)) - 97



 



For i = 2 To Len(M) '한단계 전의 키값+평문의 값=암호문C



    C = C & Chr(((temp + Asc(Mid(M, i, 1)) - 97) Mod 26) + 97)



    temp = Asc(Mid(M, i, 1)) - 97



Next i



 



M = Mid(M, 1, 1) & C '결과값 반환



End Function



 



'자동키복호화 함수



Public Function AutoKeyDecoding(C As String)



 



Dim i As Long



Dim M As String



Dim temp As Long



Dim first As Long



 



'첫번째 키값 임시저장



temp = Asc(Mid(C, 1, 1)) - 97



 



For i = 2 To Len(C) '암호문 값-키값=평문M



    If Asc(Mid(C, i, 1)) - 97 - temp > 0 Then



        M = M & Chr(((Asc(Mid(C, i, 1)) - 97 - temp) Mod 26) + 97)



    Else



        M = M & Chr(((Asc(Mid(C, i, 1)) - 97 - temp + 26) Mod 26) + 97)



    End If



    



    temp = ((Asc(Mid(C, i, 1)) - 97 - temp) Mod 26)



Next i



 



C = Mid(C, 1, 1) & M '결과값 반환



End Function



 



 



 



Dim M As String



Private Sub Form_Load()



M = "myloveisyou"



MsgBox M



AutoKeyEncryption M



MsgBox M



AutoKeyDecoding M



MsgBox M



End Sub


관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 등록자 벼배릅 등록일 04.14
알림 0