포스팅 목적
- 기록하기 위해
- 피드백을 받기 위해. 버그 있을 때, 수정 할 수 있습니다. 링크도 가져 가세요.
- 공유 - 불펌 개념이 없으니, 마음데로 사용하세요.
개발 이유
게임 정보를 서버에 다 저장해서 쓰려고 했는데, 회의 중 인터넷이 끊어져도 게임하는데 지장이 없어야 한다는 결론이 내려졌습니다. 그래서 로컬에 데이터를 저장해야 하는데, 유니티가 기본 제공하는 PlayerPrefs 은 손 쉽게 변조가 가능하기 때문에, 변조를 못하게 막아야 할 필요가 있었습니다.
그래서 유니티 보안 문서들을 보았고, 그 중에 PlayerPrefs 먼저 할 필요가 있어서, 기존에 다른 사람이 만든 코드를 찾아 보았습니다. 하지만 키를 숨기는 개념이나 value 암호화 개념을 사용하는건 찾지 못했습니다. 그래서 직접 개발(짜집기)을 하게 되었습니다.
다음에는 모듈(DLL) 암호화를 할 필요가 있습니다.
링크 1 : http://unitystudy.net/bbs/board.php?bo_table=newwriting&wr_id=355
링크 2 : ?http://www.slideshare.net/williamyang3910/unitekorea2013-protecting-your-android-content-21713675?
설명
Unity PlayerPrefs 특성상 key-value 형태로 로컬에 데이터를 저장하는데, 암호화가 되어 있지 않습니다. 그래서 다음과 같은 절차를 거쳐 PlayerPrefs 를 사용합니다.
저장 할 때
- 저장 할 Key 의 해쉬값을 얻고, 그 해쉬를 hideKey 로 사용합니다. 왜냐하면, 해커가 Key 를 보고, 용도를 파악 할 수 있기 때문입니다. 추가로 salt 가 있는 이유는 공개 해쉬 알고리즘을 사용하기 때문에, 무작위 대입으로 키를 손쉽게 알 수 있기 때문입니다.
예) hideKey = Hash(Key + salt) - 저장해야 할 Value 의 해쉬값을 얻고, Value + Hash(Value) 로 만든 뒤 암호화 합니다.
Value 의 Hash 를 얻는 이유는 복호화 후 Value 가 변조되었는지 확인이 필요하기 때문이다.
예) encryptValue = Encrypt(Value + Hash(Value))
3. 이렇게 얻어진 hideKey - encryptValue 를 PlayerPrefs 으로 저장합니다.
불러 올 때
- hideKey 를 똑같이 만듭니다.
- hideKey 로 암호화된 값을 얻고, 복호화 후 원본 saved Value + saved Hash(Value) 를 구합니다.
- saved Value, saved Hash(Value) 로 분리 한 뒤, 서로 비교하여 변했는지 검사합니다.
예) Hash(saved Value) == saved Hash(Value)
코드 : SecurityPlayerPrefs , 갱신 : 2015.03.03 23:16
결과
여담
- UnityEditor 에서 PlayerPrefs 을 수정/보기 가능하면, 개발이 좀 더 편해집니다.
: 누군가 만들면, 알려 주세요. - 믿을건 그나마 서버 밖에 없습니다.
:wq!
'연구실 > 파편화된 기록들' 카테고리의 다른 글
넥서스7 1세대, 롤리팝 업데이트 후 느려짐 현상 수정(버벅임) (0) | 2015.09.16 |
---|---|
유니티3D에 자바 라이브러리 Jar 연동하기 (How to link Jar in Unity3D) (0) | 2015.04.08 |
유니티3D를 위한 인 게임 디버그 콘솔 넣기 (In-game debug console for Unity3D) (0) | 2015.04.03 |
유니티 암호화 2편, 외부 DLL 암호화 (4) | 2015.03.17 |
디자인 패턴, 행위 패턴, 스트래티지 패턴(Strategy Pattern) (0) | 2015.03.15 |
바나나리퍼블릭 Sale 페이지 할인율 올림차순이 북마클릿 (0) | 2015.02.06 |
네티 유저 가이드 4.x (Netty User guide for 4.x) 한글 번역 (1) | 2015.02.03 |
중복 코드 제거 기법 - swith+for 코드 점프 기법 (0) | 2011.03.18 |
lunit - Unit Testing Framework for Lua (1) | 2011.02.27 |
ORA-12520 (2) | 2011.02.05 |
최근댓글