목차
Ⅰ. 개 요 ------------------------------------------------------- 2
1. 주제 선정 배경 ------------------------------------------------ 2
2. 프로젝트 목적 ------------------------------------------------ 2
3. 프로젝트 목표 ------------------------------------------------ 2
Ⅱ. 일정 및 역할분담 ---------------------------------------------- 3
Ⅲ. RSA -------------------------------------------------------- 4
1. RSA 정의 ---------------------------------------------------- 4
1. RSA 암호 방식 ------------------------------------------------ 5
1. RSA 암호화 & 복호화 ------------------------------------------- 6
Ⅳ. RSA 알고리즘 구현 ---------------------------------------------- 8
Ⅴ. 참고 문헌 ----------------------------------------------------- 9
Ⅳ. 후 기 ------------------------------------------------------ 10
1. 주제 선정 배경 ------------------------------------------------ 2
2. 프로젝트 목적 ------------------------------------------------ 2
3. 프로젝트 목표 ------------------------------------------------ 2
Ⅱ. 일정 및 역할분담 ---------------------------------------------- 3
Ⅲ. RSA -------------------------------------------------------- 4
1. RSA 정의 ---------------------------------------------------- 4
1. RSA 암호 방식 ------------------------------------------------ 5
1. RSA 암호화 & 복호화 ------------------------------------------- 6
Ⅳ. RSA 알고리즘 구현 ---------------------------------------------- 8
Ⅴ. 참고 문헌 ----------------------------------------------------- 9
Ⅳ. 후 기 ------------------------------------------------------ 10
본문내용
* m;
s = (int)s%n;
}
return (int)s;//M^e mod n 의 결과값 s 를 리턴한다.
}
//복호화를 수행하는 함수 < C^d mod N >
char decryption(int c,int d,int n){ //암호문 c 와 개인키d 그리고 n 을 인자로 받는다.
int i;
double s=1;//c의 d승을 저장할 변수
for(i=1;i<=d;i++){
if(s!=0){//암호화와 같은 방법으로 복호화도 mod 연산을 수행.
s = s*c;
s = (int)s%n;
}else
s = s * c;
s = (int)s%n;
}
return (char)s;//복호화된값 s 를 char형으로 캐스팅 시켜서 리턴한다.
}
//개인키 d를 구하는 함수 ed-1 mod z = 0
int getd(int e,int z){
int i=1,d=1;
while(i){
for(d=1;d<100000000;d++){
if(((e*d)-1) % (z*i)==0){
//ed-1 mod z = 0 연산을 수행하는 부분
return d; //값이 나오면 나온값 d 를 리턴한다.
}
}
}
return -1; //값이 나오지 않는 경우 -1리턴
}
//e를 구하기 위해 z와 서로소인 수 를 찾는 함수.
int gete(int z){
int e,j;
int small;
int big;
int count=0; //공약수 개수를 저장할 변수
for(e=3;e<10000000;e+=2){ //1을 제외하고 e를 3부터 시작하여 무한대의 의미로 2씩 증가시키며
//반복문을 수행한다. 짝수는 서로소 일 수 없으므로 제외.
if(e
small=e;big=z;
}else{
small=z;big=e;
}
for(j=1;j<=small;j++){//1부터 작은 값 까지 반복문을 수행하게 된다.
if(small%j==0 && big%j==0)
//1부터 반복문을 돌면서 count가 1이면 리턴, 즉 공약수는 1뿐이므로 서로소이다
count++; //j로 둘다 나누어 떨어지면 카운트 증가
//서로소인 경우 숫자1만 두 숫자 모두 나누어 떨어지게 된다.
}if(count==1){ //카운트가 1이면 서로소이다
return e; //두 수는 서로소 이므로 e 값을 리턴하게 된다.
}else {//이외의 경우는 서로소가 아니므로 다시 반복문 수행
count=0; //카운트값을 다시 0으로 셋팅한다
}
}
return -1; //값이 나오지 않는 경우 -1 리턴
}
int checkprime(int n){ //소수 판별 함수
int i;
if(n==1)
return 1;
if(n==2)
return 1;
for(i=2;i
if(n%i==0) //나눠서 0이나오면 소수가 아니므로 1을 리턴한다.
return 1;
}
return 0;
}
<실행 화면>
Ⅴ. 참고 문헌
두산백과사전 EnCyber & EnCyber.com
2010.05.23,
http://blog.naver.com/kimsumin75?Redirect=Log&logNo=20097245777
KAIST, 「Magnetic Resonance & Magnetism Lab」,
http://mrm.kaist.ac.kr/qc/basic/shor.html
David Harle, James Irvine , Data Communication and Networks: An Engineering Approach(JohnWiley&Sons , 2001)
WILLIAM A SHAY, Understanding Data Communications & Networks(Course Technology , 2003)
『RSA 암호와 그 원리』,2010.06.04, http://kevin0960.tistory.com/117
원동호. 현대 암호학(도서출판 그린, 2006)
하재철. C 로 배우는 암호학 프로그래밍.(미래컴, 2009)
Ⅵ. 후 기
이경용
정신없이 지나간 한 학기, 정신없이 출제되는 과제, 프로젝트와 발표의 연속이었던 1학기. 그 중 단연 어렵게 느껴진 과제는 정보 암호화 과제이다.
잘 이해도 되지 않는 암호의 알고리즘을 구현하는 것은 내게 어렵게만 다가왔다. 잘하고 싶은 마음은 굴뚝같았지만 확실히 쉽지 않은 과제였다. 애초에 RSA 암호화로 주제를 선정했다면 덜 어려웠을 것을. 생각보다 간단한 알고리즘에 조원 모두가 난감함을 감출 수 없었다. 그렇게 어렵게 돌아서 결국 최종보고서를 작성할 수 있다는 것은 조원 모두가 각자 맡은 일에 최선을 다해서이지 않을까 싶다. 이번 학기는 특히 조별 프로젝트가 많은 한 학기여서 내가 다른 사람에게 폐가 되지 않기 위해 적지 않은 스트레스를 받은 학기였던 것 같다. 열심히 한다고 했는데 어떻게 느껴졌을지는 모르지만 나 외에 두 조원이 열심히 해준 것은 확실하다. 이번 프로젝트를 통해 RSA 공개키 암호화&복호화 방식과 알고리즘 구현을 통한 C프로그래밍의 코딩 능력을 한 층 업그레이드 시키는 계기가 되었다고 생각한다.
이민응
처음에 정보암호화수업프로젝트를 한다고 했을 때 굉장히 걱정도 많이되고 고민도 많이 했었습니다. 처음에 저희 조는 nihilist 암호를 하려고 주제를 정하고 진행을 하다, 거의 마지막쯤에 RSA로 주제를 바꾸게 되어서 정말 정신없이 진행이 되었던 것 같습니다. 불행 중 다행으로 전공수업인 데이터통신에서 이번에 RSA에 대해 조금 다루게 되어서 약간도움도 좀 받을 수 있었습니다.
프로젝트를 하면서 솔직히 쉽진 않았지만 해나가면서 암호에 대해 조금 더 많이 알게 되어서 보람된 시간이었습니다.
이건희
이번 팀 프로젝트를 하기에 앞서 저는 막내로서 형들과 같이 한 조에 있는데 내가 폐만 끼치는 것이 아닌가 하는 걱정에 두려움이 많았습니다. 아는 것도 없고 C프로그램을 잘 할 줄 아는 것도 아니고 조에 어떻게 해야 보탬이 될 수 있을까 해서 최대한 열심히 해야겠다는 생각뿐이었습니다. 이번 팀 프로젝트를 통해서 지식도 지식이지만 팀원들간의 협동심과 사회성을 배울 수 있었습니다.
s = (int)s%n;
}
return (int)s;//M^e mod n 의 결과값 s 를 리턴한다.
}
//복호화를 수행하는 함수 < C^d mod N >
char decryption(int c,int d,int n){ //암호문 c 와 개인키d 그리고 n 을 인자로 받는다.
int i;
double s=1;//c의 d승을 저장할 변수
for(i=1;i<=d;i++){
if(s!=0){//암호화와 같은 방법으로 복호화도 mod 연산을 수행.
s = s*c;
s = (int)s%n;
}else
s = s * c;
s = (int)s%n;
}
return (char)s;//복호화된값 s 를 char형으로 캐스팅 시켜서 리턴한다.
}
//개인키 d를 구하는 함수 ed-1 mod z = 0
int getd(int e,int z){
int i=1,d=1;
while(i){
for(d=1;d<100000000;d++){
if(((e*d)-1) % (z*i)==0){
//ed-1 mod z = 0 연산을 수행하는 부분
return d; //값이 나오면 나온값 d 를 리턴한다.
}
}
}
return -1; //값이 나오지 않는 경우 -1리턴
}
//e를 구하기 위해 z와 서로소인 수 를 찾는 함수.
int gete(int z){
int e,j;
int small;
int big;
int count=0; //공약수 개수를 저장할 변수
for(e=3;e<10000000;e+=2){ //1을 제외하고 e를 3부터 시작하여 무한대의 의미로 2씩 증가시키며
//반복문을 수행한다. 짝수는 서로소 일 수 없으므로 제외.
if(e
}else{
small=z;big=e;
}
for(j=1;j<=small;j++){//1부터 작은 값 까지 반복문을 수행하게 된다.
if(small%j==0 && big%j==0)
//1부터 반복문을 돌면서 count가 1이면 리턴, 즉 공약수는 1뿐이므로 서로소이다
count++; //j로 둘다 나누어 떨어지면 카운트 증가
//서로소인 경우 숫자1만 두 숫자 모두 나누어 떨어지게 된다.
}if(count==1){ //카운트가 1이면 서로소이다
return e; //두 수는 서로소 이므로 e 값을 리턴하게 된다.
}else {//이외의 경우는 서로소가 아니므로 다시 반복문 수행
count=0; //카운트값을 다시 0으로 셋팅한다
}
}
return -1; //값이 나오지 않는 경우 -1 리턴
}
int checkprime(int n){ //소수 판별 함수
int i;
if(n==1)
return 1;
if(n==2)
return 1;
for(i=2;i
return 1;
}
return 0;
}
<실행 화면>
Ⅴ. 참고 문헌
두산백과사전 EnCyber & EnCyber.com
2010.05.23,
http://blog.naver.com/kimsumin75?Redirect=Log&logNo=20097245777
KAIST, 「Magnetic Resonance & Magnetism Lab」,
http://mrm.kaist.ac.kr/qc/basic/shor.html
David Harle, James Irvine , Data Communication and Networks: An Engineering Approach(JohnWiley&Sons , 2001)
WILLIAM A SHAY, Understanding Data Communications & Networks(Course Technology , 2003)
『RSA 암호와 그 원리』,2010.06.04, http://kevin0960.tistory.com/117
원동호. 현대 암호학(도서출판 그린, 2006)
하재철. C 로 배우는 암호학 프로그래밍.(미래컴, 2009)
Ⅵ. 후 기
이경용
정신없이 지나간 한 학기, 정신없이 출제되는 과제, 프로젝트와 발표의 연속이었던 1학기. 그 중 단연 어렵게 느껴진 과제는 정보 암호화 과제이다.
잘 이해도 되지 않는 암호의 알고리즘을 구현하는 것은 내게 어렵게만 다가왔다. 잘하고 싶은 마음은 굴뚝같았지만 확실히 쉽지 않은 과제였다. 애초에 RSA 암호화로 주제를 선정했다면 덜 어려웠을 것을. 생각보다 간단한 알고리즘에 조원 모두가 난감함을 감출 수 없었다. 그렇게 어렵게 돌아서 결국 최종보고서를 작성할 수 있다는 것은 조원 모두가 각자 맡은 일에 최선을 다해서이지 않을까 싶다. 이번 학기는 특히 조별 프로젝트가 많은 한 학기여서 내가 다른 사람에게 폐가 되지 않기 위해 적지 않은 스트레스를 받은 학기였던 것 같다. 열심히 한다고 했는데 어떻게 느껴졌을지는 모르지만 나 외에 두 조원이 열심히 해준 것은 확실하다. 이번 프로젝트를 통해 RSA 공개키 암호화&복호화 방식과 알고리즘 구현을 통한 C프로그래밍의 코딩 능력을 한 층 업그레이드 시키는 계기가 되었다고 생각한다.
이민응
처음에 정보암호화수업프로젝트를 한다고 했을 때 굉장히 걱정도 많이되고 고민도 많이 했었습니다. 처음에 저희 조는 nihilist 암호를 하려고 주제를 정하고 진행을 하다, 거의 마지막쯤에 RSA로 주제를 바꾸게 되어서 정말 정신없이 진행이 되었던 것 같습니다. 불행 중 다행으로 전공수업인 데이터통신에서 이번에 RSA에 대해 조금 다루게 되어서 약간도움도 좀 받을 수 있었습니다.
프로젝트를 하면서 솔직히 쉽진 않았지만 해나가면서 암호에 대해 조금 더 많이 알게 되어서 보람된 시간이었습니다.
이건희
이번 팀 프로젝트를 하기에 앞서 저는 막내로서 형들과 같이 한 조에 있는데 내가 폐만 끼치는 것이 아닌가 하는 걱정에 두려움이 많았습니다. 아는 것도 없고 C프로그램을 잘 할 줄 아는 것도 아니고 조에 어떻게 해야 보탬이 될 수 있을까 해서 최대한 열심히 해야겠다는 생각뿐이었습니다. 이번 팀 프로젝트를 통해서 지식도 지식이지만 팀원들간의 협동심과 사회성을 배울 수 있었습니다.