Linux Box 에 설치된 암호화 알고리즘의 목록을 확인해 보려면 /proc/crypto 파일을 보면 된다. 

poplinux@poplinux:/proc$ cat crypto 
name         : hmac(sha1)
driver       : hmac(sha1-generic)
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
type         : shash
blocksize    : 64
digestsize   : 20
.
.
.
nake        : md5
driver       : md5-generic
module       : kernel
priority     : 0
refcnt       : 9
selftest     : passed
type         : shash
blocksize    : 64
digestsize   : 16

 
 crypto 알고리즘을 등록할 때 사용하는 구조체인 struct crypto_alg 를 살펴보면 알고리즘 이름, 드라이버 이름을 지정하게 되어 있다.  

 하지만 md5 모듈을 보면 driver 이름은 지정하고 있지 않은 것을 확인 할 수 있다. 

crypto/md5.c

static struct shash_alg alg = {
  .digestsize = MD5_DIGEST_SIZE,
  .init          = md5_init,
  .update      = md5_update,
  .final         = md5_final,
  .export       = md5_export,
  .import       = md5_import,
  .descsize    = sizeof(struct md5_sate),
  .statesize    = sizeof(struct md5_state),
  .base         = {
     .cra_name  = "md5",
     .cra_flags   = CRYPTO_ALG_TYPE_SHASH,
     .cra_blocksize = MD5_HMAC_BLOCK_SIZE,
     .cra_module    = THIS_MODULE,
  }
};

 

 드라이버 이름을 지정하지 않았는데도 어떻게 "md5-generic" 라는 이름이 잡혀 있을까?

 그건 아래 코드와 같이 강제로 지정해 주기 때문이다. 
 
crypto/algapi.c

static inline int crypto_set_driver_name(struct crypto_alg *alg)
{
  static const char suffix[]= "-generic";
  char *driver_name = alg->cra_driver_name;
  int len;

  if(*driver_name)
      return 0;

  len = strlcpy(driver_name, alg->cra_name, CRYPTO_MAX_ALG_NAME);
  if(len + sizeof(suffix) > CRYPTO_MAX_ALG_NAME)
     return -ENAMETOLONG;

  memcpy(driver_name + len, suffix, sizeof(suffix));
  return 0;
}
 
 
블로그 이미지

김유석0

,