SEA는 파일 암호화와 실시간 보안통신(스트리밍)을 지원하는 매우 단순한 보안 알고리즘입니다. 2002년 경 고안 되었지만, 마땅한 기회가 없어 개인적인 프로젝트에서만 간간히 사용했던 방법입니다. 너무 간단해서 보안 알고리즘이라기보다는 보안기법 정도로 봐도 무색합니다만, 성능은 끝내줍니다. 본문에서 우선 간단한 특징을 소개드리고, 2007년도에 TinyOS + nesC 기반 센서네트워크 모트(USN Sensor Network Mote)간의 보안통신을 위해 사용했던 예제를 소개 드릴까 합니다.
(sixgen@gmail.com)
SEA(Simple Encryption Algorithm)의 특징
• 키 길이 및 보안 강도의 유연한 조정성 :가변 키길이 및 가변 메시지 폭을 지원하여 키길이를 가변적으로 조절할 수 있으므로 암호화 강도 및 계산비용을 필요에따라 조정할 수 있다.
• 암호화 및 복호화 연산이 동일
• 하나의 메인키로부터 파생된 서브키를 이용하여 유사 OTP를 생성하여 암호화에 이용 (암호방식은 OTP와 동일하다.)
• 알고리즘 선택형( 특정 알고리즘에 의존하지 않음) :유사 OTP생성을 위해 SHA1-160 같은 Secure Hash Algorithm이나 Cipher Algorithm을 선별적으로 사용할 수 있다.
• 다양한 확장성 :기본 원리가 매우 단순하고 파일 암호화 및 스트림 통신 등의 모든 방식으로의 응용 및 확장 개발이 용이하다.
핵심 포인트:
가장 완벽한, 유일한 보안 알고리즘은 OTP(One Time Password; 일회용 패스워드) 이다.
랜덤 정보로 구성된 충분한 길이의 OTP를 키로 사용하여 암호화(DATA와 XOR 연산) 한다면 해독이 불가능하다. (수학적으로 계산 자체가 불가능)
하지만, OTP는 암호화될 DATA와 동일한 크기의 키가 필요하므로 실용성이 없다.
SEA는 시중의 여러가지 Secure Hash Algorith 이나 Encryption Algorith들의 조합으로 pseudo OTP(유사 일회용패스워드) 생성기를 만들어 Pesudo OTP를 생성해낸다.
유사 OTP는 공격 가능성이 있다. 하지만 실용적이다.
유사 OTP도 충분한 키길이의 무작위 seed값을 사용하면 보안 강도가 크다.
SEA는 유사 OTP생성기를 정의하고 조율하여 용도에 따라 보안성과 실용성 사이의 절충점을 설정하여 이용하게된다.
2002 년에 열심히 정리해 놓은 문서들을 찾아 보다가 발견했습니다. 가끔 TV 프로그램 같은곳에서 몇년 몇월이 무슨 요일이냐? 라고 물으면 곧바로 대답을 하는 사람을 보고 엄청난 기억력이나 초능력을 가진것으로 취부하는것을 본적이 있는데요... 그게 그렇게 엄청난 것은 아닙니다. 암산만 조금 할 수 있다면 여러분도 가능합니다.
가령 오늘이 2010년 7월23일 금요일입니다. 그러면 2011년 7월 23일은 무슨 요일일까요?
답은 오늘의 요일 + 1요일 입니다. 즉, 토요일 입니다. 왜일까요? 아래의 글을 읽어보시면 아시게 될겁니다. 로보밥
0000년 00월 00일은 무슨 요일인가? 에 대한 해답
@200205261900
궂이 컴퓨터가 없더라도, 모든 해의 요일을 맞출 수 있다. 그다지 어렵지 않은 산수만 할 줄안다면, 암산으로 말이다.
원리: 요일은 7 State만을 갖는 변수이다. 즉, 어느 순간 7개중 한 상태일 뿐이다. 단 7개. 때문에 쉬울 수밖에 없다.
찍어도 1/7 확률아닌가??? ^^;;
규칙1. 현재보다 x 일 이 더 지난 후의 요일은 x mod 7 의 값만큼 다음(현재요일기준)요일이다.
예1. 오늘은 일요일이다. 23일 후는 무슨 요일인가? 풀이: 23 Mod 7은 = 2 이다. 근데 오늘은 일요일이므로 2만큼 다음요일은 화요일이된다. (이후 +2요일이라고 약칭한다)
어떤날의요일 = 오늘의요일 + x Mod 7 (x는 차이 일수)
참고사항: MOD의 의미
x Mod 7이란 x를 7로 나눈 후 나머지 값을 말합니다. 나머지(Modulus) 연산자라고 불리며, 프로그래밍 언어에서는 보통 % 라고 표시됩니다. 윈도우 전자 계산기를 공학모드로 설정하면 Mod 버튼이 보입니다. 365 mod 7 이 몇인지 한번 계산해보시기바랍니다. 답은 1입니다.
규칙2. 1년 후 오늘의 요일은 오늘의 요일 +1요일이 된다. ( 단, 윤년인 경우, +2 요일 )
우선 상식을 우선 배워보자.
상식1. 1년은 몇 일인가?
정답은 365.xxx일이다. 일년의 기준은 지구가 정확히 태양을 한바퀴 걸리는데 얼마나 걸리나를 정의하는데, 정확히는 365일이 넘는다. 그래서 문제는 해가 지날수록 시간이 조금씩 틀려진다는 것. 때문에 4년에 한번씩 (2월달에)하루를 추가하여 오류를 수정한다. 즉, 366일을 만드는 것이다(이게 윤년이다.) 평년엔 2월이 28일까지 있는데 윤년에는 29일까지 있다. 재밌는 것은 윤년의 2월29일이 생일인 사람은 4년에 한번 생일이 돌아온다 ^^; 주변에 2월29일생이 있다면 생일 잘 챙겨주시길~. (자세한 윤년의 정의는 아래의 참고자료를 보세용)
월의 일은 31일 30일 29일 28일 네가지가 있다. 때문에 미리 계산해둔 값을 기억해서 쓰면 빠르다.
31 Mod 7 = 3 (그러므로 +3요일)
30 Mod 7 = 2 (+2요일)
29 Mod 7 = 1 (그러므로 윤년의 3월의 요일은 2월의 요일 +1 )
28 Mod 7 = 0 (그러므로 윤년의 2월의 요일은 3월의 요일과 동일)
결론: 1,3,5,7,8,10,12월은 다음달 같은일에 +3요일이 된다.
4,6,9,11월은 다음달 같은일에 +2요일이 된다.
2월은 윤년일 땐 다음달에 같은 요일이 되고, 평년에는 +1요일이 된다.
그러면 다음달이 아닌 한달 전은 어떨까?
이때는 저번 달을 기준으로 잡고 + 가 -로 변하게된다.
5월 26일(일)이라면 저번 달의 26일은 4월이 -2요일이 되므로 금요일이 된다.
참고사항: 윤년의 정의
[閏年, leap year]
카테고리: 과학 > 순수과학 > 지구과학 > 천문학 > 역법 및 측시법
개요 : 태양력법에서 2월을 29일로 둔 해.
본문 출처 : 두산세계대백과 EnCyber
원래 2월은 평년이 28일까지 있는 것이지만, 만일 윤년이 없이 언제나 평년이라면 1년의 길이가 365일로 되어 실제보다 0.2422일 짧아지므로 점차 역일(曆日)과 계절이 달라진다. 그러므로 율리우스력에서는 4년마다 2월을 29일로 함으로써 4년간의 연평균 일수를 365.25일로 정하였다. 이 값은 실제보다 1년에 0.0078일이 길다.
그후의 그레고리력에서는 다음과 같은 치윤법(置閏法)을 정하고 시행하였다. 즉, ① 서력 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년으로 하고, ② 그 중에서 100으로 나누어 떨어지는 해는 평년으로 하며, ③ 다만 400으로 나누어 떨어지는 해는 다시 윤년으로 정하였다. 이로써 1년의 평균길이를 365.2425일로 정하여 역에 썼으므로 실제의 1년보다 0.0003일이 길다.
이 그레고리오력에서는 400년간에 97년이 윤년이 된다. 한국에서는 1896년(건양 1)부터 태양력이 쓰였는데 이 역법은 그레고리오력이다. 그레고리오력이 현행의 태양력이다. 율리우스력은 한국에는 들어오지 않았다. 고레고리오력의 치윤법에 의하여 1900년은 평년이었고 2000년은 윤년이 된다.
자, 이제 훈련만 잘하면 주위 분들에게 엄청난 계산력? 암산력의 소유자로 칭송 받게 될 지도 모릅니다.