SP800-108 KDF

2023. 1. 16. 16:12Security ★ Development/Cryptology

반응형

https://csrc.nist.gov/CSRC/media/Publications/sp/800-108/archive/2008-11-06/documents/sp800-108-Nov2008.pdf

 

NIST에서 발행한 SP800-108 표준은 KDF에 관한 것입니다.

보통 간단한 암호화의 대칭키같은경우 32byte 길이의 rand bytes를 뽑아서 사용하지만 중요 서비스에서 키교환같이 아키텍쳐상 보안적으로 중요한 로직은 KDF로 키를 생성하게됩니다.

SP800-108은 KDF를 어떻게 구현해야하냐에 대한 표준입니다.

 

SP800-108 KDF CTR

 

여러 모드가 있지만 counter 모드만 살펴보겠습니다.

이에 대한 예제는 아래 링크에 있지만 자바로 되어있습니다.

https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/locksettings/SP800Derive.java 

 

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