2023. 1. 16. 16:12ㆍSecurity ★ Development/Cryptology
NIST에서 발행한 SP800-108 표준은 KDF에 관한 것입니다.
보통 간단한 암호화의 대칭키같은경우 32byte 길이의 rand bytes를 뽑아서 사용하지만 중요 서비스에서 키교환같이 아키텍쳐상 보안적으로 중요한 로직은 KDF로 키를 생성하게됩니다.
SP800-108은 KDF를 어떻게 구현해야하냐에 대한 표준입니다.
여러 모드가 있지만 counter 모드만 살펴보겠습니다.
이에 대한 예제는 아래 링크에 있지만 자바로 되어있습니다.
services/core/java/com/android/server/locksettings/SP800Derive.java - platform/frameworks/base - Git at Google
* Copyright (C) 2018 The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/lice
android.googlesource.com
INPUT
key : KDF로 키를 생성하기 위한 시드키입니다. ECDH 등을 통해 생성된 shared secret같은 값이죠.
label, context : 정해지지 않은 input으로 키를 생성하기 위한 목적, 이름, 구분자 등을 넣어주게 됩니다. salt로 사용된다고 보면됩니다.
L : KDF로 생성할 키의 길이
PRF : Pseudorandom function으로 HMAC과 같은 로직을 말합니다.
1. label, 0x00, context, L로 fixed input data를 생성합니다.
2. 1값에 counter값을 추가합니다.
3. key와 위 2에서 생성된 데이터로 HMAC을 돌립니다.
4. HMAC값을 output에 붙이고 길이가 L보다 작으면 counter값을 올려서 위를 반복합니다.
끝
'Security ★ Development > Cryptology' 카테고리의 다른 글
openssl 암호화(AESGCM256) (0) | 2023.01.08 |
---|---|
FHMQV (0) | 2016.10.30 |
Cryptology 문제 2 (0) | 2015.12.03 |
Cryptology 문제 1 (0) | 2015.12.03 |