안녕하세요 한국인터넷진흥원입니다.
최근 스마트폰 이용이 증가됨에 따라, 다양한 앱들에서 개인정보, 기업의 중요문서 등과 같은 중요데이터들이 다루어지고 있습니다. 그럼에도 불구하고 중요데이터들을 보호하기 위해 암호기술을 적용하지 않은 앱들이 많이 존재하고 있습니다. 스마트폰은 PC에 비해 타인이 접근할 수 있는 기회가 많으며 분실될 확률도 상당히 높습니다. 분실될 경우 중요데이터들이 암호화되어 있지 않다면, 개인정보 침해, 중요 문서 등의 노출뿐만 아니라 이 중요데이터들이 악용되어 제 2, 3의 피해로 확산될 수 있습니다.
이에, 방송통신위원회와 한국인터넷진흥원에서는 다양한 스마트폰 앱 개발 시 국산 암호알고리즘을 보다 쉽게 적용할 수 있도록, 국산 암호라이브러리와 적용매뉴얼을 보급하고 있습니다. 스마트폰용 국산암호 라이브러리는 각 스마트폰 운영체제 별로 앱 개발 프로젝트에 라이브러리를 추가한 후, 국산암호 알고리즘들을 API 형태로 호출하여 사용할 수 있는 라이브러리입니다. 앱 개발자들은 라이브러리를 활용하여 위치정보, 고객정보, 금융정보 등과 같은 민감한 정보를 암호화하여 안전하게 저장할 수 있는 앱을 개발할 수 있습니다.
o 지원 운영체제 : Android, iOS, Windows Mobile
o 지원 국산암호 알고리즘
- 블록암호 알고리즘 : SEED, HIGHT
- 블록암호 알고리즘 운영모드 : CBC (Cipher-block chaining)
- 해쉬함수 알고리즘 : HAS-160
- 전자서명 알고리즘 : KCDSA
라이브러리 다운로드 URL : http://seed.kisa.or.kr/kor/smart/smartPhoneB.jsp
안전한 앱 개발을 위해 많은 활용 부탁드립니다.
국산 알고리즘을 사용하는 것도 좋지만, 아마도 국내 사이트에서 조건으로 걸 수도 있겠죠.
일단 안드로이드 내부에 AES, DES, MD5, SHA 등 이미 사용할 수 있는 알고리즘들이 많죠.
필요에 따라 골라 쓰시면 될 것 같습니다.
전에 SEED 사용할 일이 있었는데, 따로 KISA에서 제공해주면, 사용하기 편하겠네요.
아래 코드로 테스트했으나 성공하지 못했네요!
원인을 아시는 고수님 도와 주세요
String phoneNumber="ABCDEFG";
byte[] plainText = new byte[144];
byte[] cipherText = new byte[144];
int outputTextLen = 0;
//암호화
SEED seed = new SEED();
seed.init(SEED.ENC, key, iv);
plainText= phoneNumber.getBytes();
outputTextLen = seed.process(plainText,
plainText.length,
cipherText,
0);
seed.close(cipherText, outputTextLen);
//복호화
seed.init(SEED.ENC, key, iv);
outputTextLen = seed.process(cipherText,
cipherText.length,
plainText,
0);
seed.close(plainText, outputTextLen);
// String aa = plainText.toString();
Toast.makeText(this, phoneNumber, Toast.LENGTH_SHORT).show();
Toast.makeText(this, plainText.toString(), Toast.LENGTH_SHORT).show();
String aa = new String(plainText);
Toast.makeText(this, aa, Toast.LENGTH_SHORT).show();
Toast.makeText(this, phoneNumber, Toast.LENGTH_SHORT).show();
복호화 부분에 SEED.DEC로 하셔야 됩니다.
// 복호화
seed.init(SEED.DEC, key, iv);
outputTextLen = seed.process(cipherText, cipherText.length, plainText,
0);
seed.close(plainText, outputTextLen);
// String aa = plainText.toString();
Toast.makeText(this, phoneNumber, Toast.LENGTH_SHORT).show();
Toast.makeText(this, plainText.toString(), Toast.LENGTH_SHORT).show();
String aa = new String(plainText);
Toast.makeText(this, aa, Toast.LENGTH_SHORT).show();
Toast.makeText(this, phoneNumber, Toast.LENGTH_SHORT).show();
우와 대박 ㅋ 좋은 정보 감사합니다~^^