자바암호프로그래밍 2017년 1학기

자바 네트워크 프로그래밍 예제

URL 클래스를 이용한 URL 분석 프로그램 ParseURL.java

원격지 URL의 웹페이지 읽어오기 URLRead.java

URLConnection 클래스 사용 예제 URLConnectionReader.java

소켓 프로그래밍을 이용한 클라이언트-서버간 채팅 예제: ServerEx.java | ClientEx.java

스레드 프로그래밍을 이용한 다자간 채팅 예제: MultiChatServer.java | MultiChatClient.java

GUI 채팅 프로그램 예제: GUIChatServer.java | GUIChatClient.java

UDP 소켓 통신을 이용한 서버-클라이언트 프로그램 예제: UdpServer.java | UdpClient.java

클라이언트와 서버 사이의 파일 전송 예제 FileReceiveServer.java | FileSendClient.java

JCA/JCE 암호 프로그래밍

난수 생성 예제 SecureRandomGen.java

해쉬함수 예제 HashTest.java
파일의 체크섬 확인하기 ChecksumExample.java
해쉬함수를 이용한 동전던지기 게임 CoinToss.java
클라이언트/서버 모델의 인터넷 동전던지기 게임 CoinTossServer.java : CoinTossClient.java

메시지인증코드(MAC) MACTest.java

패스워드기반 암호화 PBKDF1 PBE1Example.java
패스워드기반 암호화 PBKDF2 PBE2Example.java
패스워드 해쉬 PasswordHash.java

* 난수화된 토큰 인증 TokenLogin.java
- 로그인된 사용자에게 서버가 두개의 토큰(공개토큰, 비밀토큰)을 발급하고 클라이언트는 이를 이용하여 난수화된 로그인정보를 생성하여 자동로그인에 사용함

대칭키 암호 예제 SymEncryption.java
AES 암호 예제 AESTest.java
AES/CBC모드 암호 예제 AESCBCTest.java
파일 암호화 예제 CipherStreamExample.java

RSA 암호화 알고리즘 RSAEncryption.java
Key Factory 예제 KeyFactoryExample.java
키의 파일저장, 읽어오기 예제 RSAKeyFile.java
RSA 암호화/복호화 예제 RSAExample.java
비밀키 전송 KeyTransport.java

RSA 전자서명 알고리즘 RSASignature.java
RSA 전자서명 SignatureExample.java
DSA 전자서명 SignatureExampleDSA.java
ECDSA 전자서명 SignatureExampleECDSA.java
RSA/PSS 전자서명 SignatureExampleRSAPSS.java
전자봉투 Envelope.java

RSA 종합 예제 RSATest.java

인증서 활용

Bouncy Castle 이란? Bouncy Castle 은 확장된 기능을 가진 자바암호라이브러리로 인증서 활용 환경이 잘 되어 있음.
Bouncy Castle 이용 환경 구축: http://www.bouncycastle.org/latest_releases.html 에서 http://www.bouncycastle.org/download/bcprov-jdk15on-149.jar 파일을 다운로드하여 현재 사용중인 workspace에 저장. 프로젝트에서 위의 jar 파일을 사용하도록 설정.
이클립스에서 외부 JAR 파일 추가하기: 프로젝트폴더->오른쪽마우스->속성(Properties)->Java Build Path->Liberaries->Add External JARs->다운로드받은 jar파일 선택->OK

SSL 인증서 활용하기
- 서버 EchoServer.java
- 클라이언트 EchoClient.java

인증서 활용하기
- 공인인증서 읽어오기 CertViewExample.java
- 공인인증서 유효성 검증하기 CertValidateExample.java

인증서 종합 활용 예제: 인증서 생성, 인증서 저장, 암호화, 전자서명 CertificateTest.java

* PKMS (Private Key Management Service), 개인 키관리 서비스 PKMS.java
- 사용자가 여러대의 컴퓨팅 기기들을 사용하는 유비쿼터스 환경에서 기기별로 서로 다른 기기인증서를 발급하여 사용할 수 있도록 하는 개인 키관리 서비스
- 사용자가 하나의 인증서에 기반하여 스스로 여러 기기들에서 사용할 수 있는 기기인증서를 발행하여 사용함

암호 구현

두 수의 최대공약수 구하기 GCD.java
역수 계산하기(확장유클리드 알고리즘) ExtendedEuclid.java
모듈러승산 계산하기(Square-and-Multiply) SquareMultiply.java
모듈러승산 테이블 만들기 ExpTable.java

BigInteger 클래스에서의 사칙연산 테스트 BIMath.java

RSA 알고리즘 RSABI.java
ElGamal 암호화 알고리즘 ElGamalBI.java
Schnorr 전자서명 알고리즘 SchnorrSigBI.java
비밀서명(Secret Signature) SecretSig.java

Diffie-Hellman 키합의 DH.java
은닉서명(Blind Signature) BlindSig.java
영지식증명 ZKPSchnorr.java
영지식증명(Non-Interactive) ZKPSchnorrNI.java