알고리즘

    [Crypto] NEAT, NES

    NEAT (National Encryption AlgoriThm) 알고리즘 분석 요약NEAT은 대한민국 국정원이 설계한 비공개 국가 표준 암호 알고리즘으로, 1997년에 국가기관용 표준 암호로 제정되었다. 이 알고리즘은 정부 기관에서 내부 데이터와 문서 암호화를 위해 사용되며, security through obscurity(암호화 원리를 숨김으로써 보안을 유지하는 방식)를 부분적으로 의존하고 있다. 128비트 블록 암호화 알고리즘으로, IDEA(International Data Encryption Algorithm)와 구조적으로 유사하다. 특징암호 구조Feistel 네트워크 기반: 암호화와 복호화 과정이 거의 동일12.5 라운드: 12번의 full-round 연산과 1번의 half-round 연산으로 ..

    Base64

    Base64, Base32, Base16은 바이너리 데이터를 텍스트 데이터로 인코딩하는 표준 방식으로, 바이너리 데이터를 안전하게 전송하거나 저장하기 위해 사용된다. 이는 주로 이메일, URL, 또는 파일 저장 시 인코딩에 사용된다. Base64 는 64종류의 문자를 이용하기 때문에 인코딩 후에는 1문자당 6bit(64=2^6) 의 정보를 가진다.Base64: 64개의 문자 (A–Z, a–z, 0–9, +, /) → 6bitBase32: 32개의 문자 (A–Z, 2–7) → 5bit숫자 2–7을 사용하는 이유는 혼동을 피하기 위해 (0과 O, 1과 I 구분)Base16: 16개의 문자 (0–9, A–F) → 4bit특성Base64Base32Base16사용 문자 수64 (A–Z, a–z, 0–9, +, /..

    Google authenticator를 사용한 2FA 인증 #1 이론

    Google authenticator를 사용한 2FA 인증 #1 이론

    system에 로그인 하기 위한 사용자 이름 과 비밀 번호가 있어야한다. 여기에 보안계층을 추가하기 위해 one time password generator 를 사용할 수 있다. Google Authenticator 에서 사용하는 암호기법을 살펴보면 TOTP, HOTP 두가지를 사용한다. HOTP(Hmac based One Time Password)HMAC 기반 일회용 비밀번호(또는 HOTP) 는 Shared Secret 와 Event Counter를 사용하는 이벤트 기반 OTP 알고리즘 이다. HOTP의 핵심은 비밀 키이다. seed라고도 하는 비밀키는 counter 값과 달리 고정된 값이고, 토큰을 초기화하는 동안 otp 토큰과 서버가 한번만 교환하는 값이다. 그런 다음 비밀키는 클라이언트와 서버에 안..

    Kalman Filter and Sensor Fusion #1 How it work

    Kalman Filter and Sensor Fusion #1 How it work

    sensor fusion은 여러개의 센서로부터 수집된 데이터를 결합하여 보다 정확하고 신뢰할 수 있는 데이터를 생성하는 기술을 의미한다. 이 과정에서 각 센서의 장점을 최대한 사용하면서 단일 센서가 가지는 오류나 한계를 보완할 수 있다. 만약 우리가 자율 주행 로봇을 개발한다고 상상해보자. 로봇은 탐색을 위해 자신의 위치를 정확히 알아야한다. 그렇기에 로봇은 상태를 가질 필요가 있다. 상태는 무엇이든 될 수 있다. 위치나 속도 뿐아니라 탱크의 유체 양, 엔진의 온도, 터치패드의 손가락 위치 데이터도 상태가 될 수 있다. 만약 로봇이 GPS 센서에만 의존하여 이동한다면 절벽에서 추락하거나 장애물을 만날 수 있다. GPS 데이터는 10m 정도의 오차가 존재하고 위치를 완벽하게 추정하기에는 불충분하다. 시스템..

    deflate: LZ77 + Huffman coding

    허프만 코딩은 무손실 데이터 압축에 널리 사용되는 알고리즘이다. 입력 심볼에 가변 길이 코드를 할당하고 더 자주 발생하는 심볼에 더 짧은 코드를 할당하여 데이터를 효율적으로 인코딩한다.  허프만 코딩은 접두사 코드의 원칙에 따라 작동하며 여기서 어떤 코드도 다른 코드의 접두사가 되지 않도록 한다. 이를 통해 인코딩된 데이터를 명확하게 디코딩할 수 있다. 이 알고리즘은 허프만 트리라고 하는 이진 트리를 구축하는데 여기서 leaf node는 입력 기호를 나타내고 내부 노드는 병합된 기호를 나타낸다.  각 기호의 이진 인코딩은 root에서 leaf node 까지 트리를 탐색하여 결정된다.  입력 기호의 빈도에 따라 허프만 트리를 구성하고 각 기호에 대한 허프만 코드를 생성해야한다.  구조체 정의#include..