내가 좋으려고 열심히 한글화해본 앱들.

% 혼자 @ 미완성

안드로이드 앱

BeyondPod

  • "crowdin" 플랫폼을 쓴다.
  • 사실 숟가락만 얹... 진 않았지. 나름 기여분 많다.
  • 왕년에는 Windows Mobile, Android 통틀어 최고의 앱이었는데 지금은...
    • v4에서 머티리얼 UX 적용한다고 갈아엎었는데, 그 때 사용자들이 썰물처럼 빠져나감
    • 굳이 이 비싼 돈 주고 살 이유가 없음, 요새는 세일도 잘 안 함
    • 좋은 다른 "무료" 앱 많이 나옴
    • 국내는 팟빵이 다 해먹음, 그 다음 팟티?
  • 그래서 별 의미는 없게 되었다

Transdroid/Transdrone %

  • 웹서버 기능 지원하는 비트토렌트 클라이언트 프로그램을 원격제어하게 돕는 앱
  • 예전에는 자기네 웹사이트에 직접 번역문을 올리면 되었는데,
  • 얼마 전에 보니 "crowdin"으로 이사했다

EBookDroid %

  • 러시아 산 앱인 듯... 최근 카스퍼스키의 NSA 털이를 생각할 때, 사용이 조금 두렵다.
  • 개발자의 원드라이브 계정에 원문이 있고, 이를 번역해서 개발자에게 메일로 보내줬다.
  • 17년 하반기에 한 번 번역문 업데이트했었던 듯.

KOReader

  • 다 된 밥상에 숟가락만 얹음
  • 밥상이 맘에 안 드는 구석이 좀 있으나 숟가락 얹어서 나아졌는지는 글쎄..

데스크탑

Zim

  • "launchpad" 플랫폼을 쓴다.
  • 다른 사람이 다 해놓은 것에 숟가락만 얹었다.
  • 몇 가지 거슬리는 문제가 있기는 하나, 대충 쓰기 좋음 >_<

Zotero @

  • "transifex" 플랫폼을 쓴다.
  • 요것도 숟가락을 얹었다. 숟가락이 좀 큼.
  • 흠... 용어를 몰라서 손대기 애매한 것들이 있다. 틀렸으면 다른 분이 고치겠지.

eM Client % @

  • Outlook도 싫고, Thunderbird도 싫고 해서...
  • 메일, 일정, 연락처 딱 있고, 구글 계정 연동 가능하며(!) 예약 전송 기능도 있다!
  • 문제는 한글 "입력" 기능에 간헐적으로 버그 있음
    • 입력란 바꿀 때 이전에 입력하던 글자가 따라오는 문제
    • 가끔 이유없이 한글 입력 안 되는 문제 (Alt-Tab 해서 갔다 오면 괜찮)
  • 문제 2. 제대로 종료 안 하면 켤 때 DB 검사하느라 한 세월... 그래서 추천을 못 하겠네.
  • 전용 번역 프로그램을 쓴다.
  • 번역문 보냈더니 고맙다고 프로 키 몇 개 주시긴 했는데, 정식 버전에서는 내 번역본 버림받음 >_<

ruTorrent %

  • rTorrent의 웹 프론트엔드
  • GitHub 저장소 포크한 뒤, 번역문 추가해서 리퀘스트 보냄.
  • 오래전에 완료한 뒤로 문장 몇 개 추가되었던데, 무슨 기능인지 잘 몰라서...

Flood %

  • rTorrent의 또다른 웹 프론트엔드, React로 작성되어서 모던한 게 자랑이라고..

Form History Control (확장기능)

  • 유용하게 잘 쓰고 있어서, 조금이나마 기여(방해?)하고자 잽싸게 작업.
반응형

Intel FPGA, "Securing IoT Devices can be Never-Ending"

IoT 요소와 보안 요소

  • IoT device = HW + SW (+firmware) + data + messages into/out-of device
  • 각 요소에 대한 세 가지 가정
    • 각 요소는 신뢰할 수 있는 출처에서 제작되었다
    • 위·변조되지 않았다
    • 시스템 디자이너가 의도한 작업만을 수행한다
    • device는 위 가정을 신뢰하거나, 매 번 시험하는 선택을 할 수 있다.
  • "대전제": 완벽한 보안을 달성할 수는 없다. 주어진 설계/제조 예산 아래서, 시스템이 다루는 작업의 중요성보다 해킹에 필요한 비용이 최대한 비싸도록 만드는 것이 목표.

기기에 도달된 메시지를 신뢰하려면

공개키 인증을 통해 메시지를 검증한다

  • 서버와 기기가 공통된 hash 방법을 구현한다
  • 서버는 메시지와, 메시지의 hash를 개인키로 암호화한 hash를 전달한다
  • 기기는 같은 방법으로 메시지를 hash한 후, 공개키로 hash를 복호화하여 두 hash를 비교한다
  • 같으면 높은 확률로 메시지를 신뢰할 수 있다
  • 메시지 자체를 암호화할 수도 있으나, 공개키 연산은 비싸다

그러면 그 공개키는 어떻게 믿을 수 있을까?

  • Certification Authority (인증 기관) chain이 있다.
  • 키를 인증하는 상위 키도 같은 공개키 암호화 방식으로 작동.
  • chain을 쭉 따라가면 결국 끝이 있는데, 여기는 현실 계약서 서류가 보호해 주는 걸로.

기기의 인증 절차는 믿을 수 있을까? "나"를 믿을 수 있을까?

걱정거리는 더 있다.

  • 인증 절차를 관장하는 코드가 변조되면? 기기 OS가 변조되면?
  • 개발 PC가 해킹당해서 인증서가 변조되면?
  • "하드웨어 디자인에 백도어가 심겨 있다면?"

미사일 발사 시스템도 아닌데 과한 걱정이라구? IoT 아기 모니터를 변조해서 DDoS용 봇넷으로 만든 빌런이 있다. 어떤 시스템을 만들든 최악의 상황을 고려는 해야 한다.

소프트웨어 개발, 업데이트 배포 시에도 위의 메시지 인증 절차와 같이 인증 절차를 넣어 두어야 한다. 그런데 이 소프트웨어는 어떻게 믿지?

"The Root of Trust"

CPU의 보안 동작 모드, 나아가 "Root of Trust"를 구현하는 것은 쉽지 않다

  • "신뢰할 수 있는 하드웨어가 신뢰할 수 있는 코드를 실행해야 한다."를 구현하기 위해,
  • 신뢰할 수 있는 하드웨어
    • 신뢰 수준이 낮아도 된다면, 믿을 수 있는 제조사의 MCU
    • 그렇지 않다면,
      • formal verification 및 functional safety 기준을 만족하도록 철저히 설계·검증한 디자인
      • 당신의 기관에서 검증하거나 직접 다룰 수 있는 공장에서 제조
      • tamper protection, side-channel attack protection 적용된 디자인
      • physically unclonable function (PUF) 통해 유출·복제되지 않는 비밀 ID 부여
  • 신뢰할 수 있는 코드 실행
    • hardware security module (HSM)
      • 보안 키 저장소, (HW 기반) 암호화 엔진, ...
      • tamper, intrusion 감지 기능, secure boot 관장
    • 메모리 보호
      • HSM만 읽고 쓸 수 있는 메모리 영역 제공

Active Monitor

critical system이라면 위의 시스템들과 별개로, 비정상 동작을 감지하여 경고 또는 시스템을 중단시키는 감시자가 필요할 수도 있다.

  • 정상 동작을 간단한 규칙으로 정의할 수 있다면 HSM 내의 소프트웨어든 하드웨어든 만들면 그만
  • 규칙이 복잡하다면? 딥러닝을 활용할 생각을 할 수 있으나,
    • 딥러닝 전문가 인력이 적고,
    • 지도 학습을 위해 옳은/위험한 동작 데이터를 마련하는 일은 불가능하다시피 하다
    • 동작 데이터 자체가 변조될 수 있는 가능성을 걱정해야 한다
    • MCU에서 구현하기에 딥러닝 연산은 자원을 많이 필요로 한다
  • 정말정말 critical system이면, heterogeneous redundancy 개념이 쓰이게 된다
    • 같은 설계 사양을 다르게 구현한 시스템 세 개를 마련해서, 둘 이상이 일치하는 출력 결과로 동작 수행
    • 다른 시스템 두 개 이상을 모두 해킹하기는 비용이 많이 들겠지.

그러나... 설계/제조 비용 문제

1$짜리 MCU 칩에 위 보안 기능을 넣는 것은 현실적으로 불가능하다.

  • HSM 넣을 돈이 없다
  • redundancy 넣을 자리가 없다. 물론 돈도 없다
  • 어쨌든 돈도 없고 아무것도 없다

그러면 어떻게 할까?

  • 무시한다
  • 적당히 포기하고 낮은 수준의 보안을 적용한다
  • 보안 책임을 IoT 기기 대신 상위 단계의 IoT 허브로 넘긴다
  • 보다 미세화된 신공정으로 triple-redundant MCU & internal HSM을 구현한다.
  • 시스템 전체를 통째로 팔면서, 보안을 위한 설계·제조 비용을 시스템 전체 비용에 반영한다.
    • ARM 수석 연구원 왈, "어차피 IoT 시스템은 칩 하나만이 아니라 시스템 전체라야 의미 있는 것 아니냐"
  • 그냥 보안 강화 칩을 비싸게 판다 ($15 > $1)

곧 들이닥칠 IoT 보안 문제, 어떻게든 풀게 될 것이다.

반응형

Caffe-TensorFlow 사용법

요새는 TF도 Model Zoo가 잘 갖춰져 있어서 의미는 없지만, Caffe의 (주로 CNN) Model을 TF로 변환해 주는 좋은 도구이다.
물론 모든 모델을 변환할 수는 없는 노릇이다. 코드 업데이트가 멈춘 지 조금 되었기에 최신 레이어는 지원이 안 되고, 오래 된 레이어라고 다 되는 것도 아닌 것 같다. 따라서 사용 전에 README, GitHub issue란을 잘 살펴보아야 의미 없는 노력을 피할 수 있겠다.
GitHub 저장소

그러나, 변환된 모델이 원래 모델의 정확도를 달성하지 못해서 아직까지는 헛짓거리가 되었다...

설치

  • 깃 저장소에서 소스코드 받아오고..
  • PyCaffe 설치하면 좋지만 건너뛰어도 돌아는 가고..
  • TensorFlow 환경을 갖춰준다: Anaconda 사용자라면 TF가 깔린 환경을 activate해 준다

사용 전 코드 수정

Py2, TF 1.0, protocol buffer 예전 버전 (?) 환경에서 작성된 것으로 보인다. Py3, TF 1.2+, protocol buffer 1.2+에서 사용하려면 몇 가지 수정이 필요하다. 주먹구구로 수정한 코드는 아래와 같다.

(TODO link to patch file)
$ git apply {patch file}

사용법

먼저 Caffemodel, model description 파일을 준비한다.
그 다음, 본 프로젝트 루트에서 아래 명령을 실행하면 된다.

$ ./convert.py --caffemodel <path/to/caffemodel> --data-output-path <path/to/output/model.npy> --code-output-path <path/to/otuput/model.py> <path/to/model/description/file>

요렇게 하면 model parameter를 담는 numpy data 파일과 layer 구조를 정의하는 python code 파일이 생성된다.
프로젝트에 함께 들어있는 TF 코드를 통해 (./kaffe/tensorflow/) 돌려볼 수 있으나, 요걸 쓰는 대신 직접... 모델 코드를 작성했다.

ImageNet / AlexNet

ILSVRC '12 training/test 데이터

올바르게 불러오는 방법은 대체 무엇일지...
요전에 TF 공식 저장소의 Inception network 예제에서 가져온 ImageNet data reader는 Caffe에서의 데이터 가공법과 많이 다른지 모델 정확도가 올라오질 않았다. 내가 코드를 잘못 다뤘겠지만!

대신 DoReFa-Net 코드 찾다가 겸사겸사 본 TensorPack의 data reader를 사용했다. 문제는 Caffe 모델, caffe-tensorflow 코드 저자의 시험 결과보다 모델 성능이 1% 적게 나와서 고민. 편의상 TensorPack data source가 가져온 데이터를 placeholder에 feed dict로 넣는 원시적이고 성능 낮은 방법을 써서 또 고민.

그냥 feeddict에 넣는 대신 Tensorpack과 Multigpu를 활용한 빠른 트레이닝 코드 작성하기 글을 참조해서 TF Queue를 씁시다..

  • tensorpack 설치

  • imagenet dataset 다운로드

  • tensorpack 문서에 따라 dataset 재가공

    • 아래와 같은 코드로 이미지들을 lmdb 포맷으로 (또는 TensorPack가 지원하는 다른 포맷) 압축

      class BinaryILSVRC12(ILSVRC12Files):
      def get_data(self):
      for fname, label in super(BinaryILSVRC12, self).get_data():
          with open(fname, 'rb') as f:
              jpeg = f.read()
          jpeg = np.asarray(bytearray(jpeg), dtype='uint8')
          yield [jpeg, label]
      ds0 = BinaryILSVRC12('/home/dataset/imagenet/', 'val')
      ds1 = PrefetchDataZMQ(ds0, nr_proc=1)
      dftools.dump_dataflow_to_lmdb(ds1, '/home/dataset/imagenet/lmdb/orig/ILSVRC-val.lmdb')
      
    • 요 코드를 실행하면 수 시간 후에 lmdb 파일 생성해 줌.

  • data source 코드 작성 -- 입력 파이프라인 연결 : 읽어서 > 순서 섞고 > 필요한 이미지 가공 (주변부 자르기, 평준화 등) > 준비!

다른 AlexNet 모델 실패기

  • 구글에서 alexnet tensorflow 치면 나오는 모델도 있는데... 위의 예전 data reader 문제와 맞물려 정확도가 안 나와서 실패...

그러나...

얻은 Top-5 정확도

(오른쪽은 Caffe-TF README.md에 언급되어 있는, 제작자가 달성한 정확도)

  • CaffeNet: 78% < 79.93%
  • VGG-16: 88% < 89.88%

왜... 낮지...

반응형

+ Recent posts