Skip to content

SoTree17/secureQR-module

Repository files navigation

secureQR-module

ENGLISH README
SecureQR은 자바에서 사용가능한 위변조 방지 기능이 있는 QR 코드 라이브러리 입니다.

목차

Get Started

Java 프로젝트에 JAR 파일을 외부 라이브러리로 추가함으로써 SecureQR을 사용하실 수 있습니다.

Download

Github 릴리즈 탭에서 JAR 파일을 다운받으실 수 있습니다.

How to SecureQR Works?

howtowork

  1. 보안 QR 리더기를 통해 보안 QR코드(secureQR-module에 의해 생성된 QR코드)를 스캔합니다.
  2. QR코드 속 데이터와 몇 가지 정보가 secureQR-module-android에 의해 서버로 전송됩니다.
  3. 서버는 데이터를 복호화하고 올바른 데이터인지 검증합니다.
  4. 만약 복호화와 검증에 성공하였다면, QR코드 속 원본 데이터를 돌려줍니다.

secureQR 예시

라이브러리를 적용한 예시 웹 애플리케이션

Usage

crypto

Interface SecureQrCrypto
SecureQrCrypto 인터페이스를 구현함으로써, 사용자 정의 암호화 객체를 secureQR에서 사용할 수 있습니다.

Type Method Description
String getInstanceType() 현재 인스턴스 타입을 반환합니다. 만약 암호화에 관한 객체라면 "CRYPTO"를 반환합니다.
String getMethodType() 암호화 방식을 반환합니다.
String encrypt(String message) 암호화된 문자열을 반환합니다.
String decrypt(String message) 복호화된 문자열을 반환합니다.

Interface SecureQrHash
SecureQrHash 인터페이스를 구현함으로써, 사용자 정의 해시함수를 secureQR에서 사용할 수 있습니다.

Type Method Description
String getInstanceType() 현재 인스턴스 타입을 반환합니다. 만약 해시에 관한 객체라면 "HASH"를 반환합니다.
String getMethodType() 해시 방식을 반환합니다.
String hashing(String message) 해시된 메시지를 반환합니다.

class SecureQrCryptoArray
SecureQrHash, SecureQrCrypto 그리고 데이터를 저장하는 배열입니다. 해시, 암호화 방식은 MethodPair를 통해 crypto_arr에 저장되고 데이터는 data_arr에 저장됩니다.

Type Method Description
Constructor SecureQrCryptoArray() crypto_arr 와 data_arr 를 빈 ArrayList로 초기화합니다.
int crypto_size() crypto_arr의 이즈를 반환합니다.
int data_size() data_arr의 사이즈를 반환합니다.
void add(SecureQrHash _h, SecureQrCrypto _c) (해시, 암호화) 쌍을 crypto_arr에 추가합니다.
SecureQrHash getHash(int index) index 위치에 있는 해시함수를 반환합니다.
SecureQrCrypto getCrypto(int index) index 위치에 있는 암호화 방식을 반환합니다.
int addData(String _data) 데이터를 data_arr에 추가하고 그 데이터가 들어있는 index를 반환합니다. 이 index는 secureQR 인증에 필요합니다.
String getData(int index) index 위치에 있는 데이터를 반환합니다.

qr_util

class MethodPair
해시, 암호화 객체 쌍을 저장하는 객체입니다.

Type Method Description
Constructor MethodPair(SecureQrHash _h, SecureQrCrypto _c) MethodPair를 매개변수로 초기화합니다.
SecureQrCrypto getCrypto() 저장된 암호화 객체를 반환합니다.
SecureQrHash getHash() 저장된 해시 객체를 반환합니다.

class RandomString
랜덤 문자열을 생성하는 객체입니다.

Type Method Description
String getString(int length) length 길이의 랜덤 문자열을 반환합니다.

qr

Interface Generatable
Generatable 인터페이스를 구현함으로써, 보안 QR코드를 생성할 수 있습니다.

Return Type Method Params Description
byte[] createSecureQRcode() SecureQrCryptoArray arr : 해시,암호화방식, 데이터가 저장된 SecureQrCryptoArray 객체입니다.
String authUrl : 보안 QR코드를 인증할 서버의 URL입니다.
int c_index : SecureQrCryptoArray에서 사용할 (암호화, 해시) 쌍이 저장된 index입니다.
int d_index : SecureQrCryptoArray에서 사용할 데이터의 index입니다.
int width, int height : QR 이미지의 가로, 세로 크기를 지정합니다.
보안 QR코드 이미지에 대한 PNG byte array를 반환합니다.
boolean createSecureQRImage() byte[] qr_byte_arr : 보안 QR코드 이미지의 byte array 입니다.
int off : 시작 offset (일반적으로 0)
String path : 이미지를 저장할 경로
보안 QR 코드를 저장하고, 성공했으면 True, 아니면 False를 반환합니다.

class Generator
보안 QR코드를 생성하는 클래스 입니다.

Type Method Description
byte[] createSecureQRCode(SecureQrCryptoArray arr, String authUrl, int c_index, int d_index, int width, int height) SecureQrCryptoArrayc_index에 있는 암호화 방식을 사용하여 d_index에 있는 데이터를 암호화합니다. 그리고 authURL, c_index, d_index, 암호화된 데이터를 함께 JSON으로 묶은 뒤 이를 저장한 QR코드를 생성합니다. 생성된 QR코드 이미지를 byte array 형태로 반환합니다.
bool createSecureQRImage(byte[] qr_byte_arr, int off, String path) qr_byte_arr로 들어온 byte array 를 QR코드 이미지로 변환한 뒤, path에 저장합니다.

Interface Readable
Readable 인터페이스를 구현함으로써, QR 이미지 파일을 읽고 데이터를 추출할 수 있습니다.

Return Type Method Params Description
String readSecureQRCode(File qrCodeImage) File qrCodeImage QR 이미지 파일을 인자로 받아서, QR 이미지에 담긴 데이터를 호출자에게 반환합니다.
String readSecureQRCode(String filepath) String filepath QR 이미지 파일의 경로를 인자로 받아서, QR 이미지에 담긴 데이터를 호출자에게 반환합니다.

class Reader
QR코드를 읽어서 QR 코드내의 데이터를 추출하는 클래스입니다.

Type Method Description
String readSecureQRCode(File qrCodeImage) QR 코드 이미지 파일을 읽고, 안에 담긴 데이터값을 반환합니다.
String readSecureQRCode(String filepath) QR 이미지 파일이 저장된 경로로 부터 이미지를 읽어 값을 반환하는 메소드입니다.

class AuthQR
secureQR을 인증하는 클래스입니다.

Type Method Description
Constructor AuthQR(SecureQrCryptoArray arr) secureQR 인증에 사용될 SecureQrCryptoArray를 등록함으로써 authQR을 초기화합니다.
boolean isSecureQR(String read_data) 데이터가 secureQR의 형식과 같은지 확인합니다.
String getOriginData(String encrypted, int c_index, int d_index) SecureQrCryptoArray c_index에 있는 해시 함수와 암호화 방식으로 encrypted를 복호화하고, d_index에 있는 데이터와 비교하여 secureQR을 인증합니다. 만약 모든 인증에 통과했다면, 원본 데이터를 반환합니다.

Build

이 프로젝트는 Gradle로 빌드할 수 있습니다.
gradle tasks 중에 jar을 실행하면 , 컴파일 된 jar파일을 /build/libs/secureQR-module-x.y.z.jar 에서 찾으실 수 있습니다.

  • IntellJ 사용시 빌드 설정에서 Run tests using: IntellJ IDEA 로 되어있다면 build.gradle에 아래와 같은 코드를 추가해주세요.
test {
    useJUnitPlatform()
}

dependency

  • zxing:core 3.4.1
  • zxing:javase 3.4.1
  • gson 2.8.8

Open Source Lisence

Copyright

Component Version Homepage License
Zxing 3.4.1 https://github.com/zxing/zxing Apache-2.0 License
Gson 2.8.8 https://github.com/google/gson Apache-2.0 License
Junit 4.13.2 https://junit.org/junit4 Eclipse Public License 1.0

Contribution

Reporting bugs

Bugs are tracked as GitHub issues.
Create an issue on this repository and if possible, please provide the following information.

  • Use a clear and descriptive title
  • Describe the exact steps which reproduce the problem
  • Include screenshots and animated GIFs

Suggesting Enhancements

Enhancement suggestions are tracked as GitHub issues.
Create an issue on this repository and if possible, please provide the following information.

  • Describe the current behavior and explain which behavior you expected to see instead and why
  • Include screenshots and animated GIFs
  • Explain why this enhancement would be useful

Open Pull Requests

A Pull Requests (PR) is the step where you submit patches to this repository.
(e.g. adding features, renaming a variable for clarity, translating into a new language)

If you're not familiar with pull requests, you can follow these steps.

  1. Fork this project and clone your fork
git clone https://github.com/<user-name>/secureQR-module.git
cd secureQR-module
  1. Create a new topic branch (off the main project development branch) to contain your feature, change, or fix
git checkout -b <topic-branch-name>
git pull
  1. Developing a new feature
  2. Push the feature to your fork
git push origin <topic-branch-name>
  1. Open a Pull Requests with a description

About

SecureQR module for server

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages