AES
  Advanced  Encryption Standard 의 약자로써 미국 정부 표준으로 지정된 암호화 알고리즘. 기존 DES 를 대체하는 암호화 알고리즘 입니다. 
  AES 알고리즘 방식은 ECB(Electronic CodeBook) 나 CBC(Cipher Block Chaning) 기법을 사용하는데 기존까지는 간단하고 구현이 쉬운 ECB 방식을 사용했다면 최근에는 CBC 방식을 사용하고 있습니다.
  
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
http://blog.naver.com/PostView.nhn?blogId=taketime62&logNo=90043063571 



블로그 이미지

김유석0

,
리눅스에서 제공하는 MD5 HASH 알고리즘의 사용 예입니다. 

결과 예제
 
 입력 메시지  (A)
 변환 메시지  (7fc56270e7a70fa81a5935b72eacbe29)
 입력 메시지  (AB)
 변환 메시지  (b86fc6b051f63d73de262d4c34e3a0a9)
 입력 메시지  (ABC)
 변환 메시지  (902fbdd2b1df0c4f70b4a5d23525e932)


자세한 내용은 첨부 파일 참조 바랍니다. 

md5_example.tar.bz2






 
블로그 이미지

김유석0

,




알고보면 공대생의 적
 

'재밌는거' 카테고리의 다른 글

기회주의견  (0) 2011.10.26
추성훈의 무리수  (0) 2011.10.23
자게인의 방문  (0) 2011.10.14
무겸이가 사랑하는 그녀  (0) 2011.10.05
고슴도치  (0) 2011.09.25
블로그 이미지

김유석0

,

자게인의 방문

재밌는거 2011. 10. 14. 16:55
자게인의 방문

 

 

'재밌는거' 카테고리의 다른 글

추성훈의 무리수  (0) 2011.10.23
공대생의 정모 사진  (0) 2011.10.15
무겸이가 사랑하는 그녀  (0) 2011.10.05
고슴도치  (0) 2011.09.25
정답 : 항문  (0) 2011.09.24
블로그 이미지

김유석0

,
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

,

[crypto] ASync Hash api

development 2011. 10. 12. 11:28
Linux Crypto 엔 hash 알고리즘 모듈이 들어가 있습니다.

1. HASH 란 무엇인가?
  HASH 란 결정형(Deterministic procedure) 단방향 알고리즘입니다. 
  풀어서 설명하면 어떤 데이터가 있는데 이 데이터의 결과값의 크기는 항상 지정된 크기로 나오게 되고 한번 Hash 과정을 거치면 원래 데이터가 무엇이었는지를 역으로 풀어 볼 수가 없다는 뜻입니다. 

 HASH 알고리즘 중에 MD5  를 예를 들면
   출력 크기 : 128bit(16Byte)
   원본 데이터 : "MKKIM_BABO"
   출력 데이터 : "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\x09\x98\xec\xf8\x42\x7e"(여기서 '\x' 는 구분자 이므로 실제 데이터는d41d8cd98f00b204e9800998ecf8427e" 입니다.) 

  로 나오다고 가정할 때, 입력 데이터의 크기에 상관 없이 출력 데이터의 길이는 무조건 128bit(16Byte) 이고 출력 데이터를 바탕으로 원본 데이터인 "MKKIM_BABO" 를 역추적할 수가 없습니다. 

  Hash 는 암호화가 아닙니다. 암호화는 암호/복호가 가능해야 하는데 hash 는 복호가 불가능합니다. 
  그러므로 보내진 데이터가 오염없이 정상적인 데이터인지를 확인하는 용도로 사용된다고 보면 됩니다. 


 
   



 
블로그 이미지

김유석0

,
completion(완료)는 kernel 동기화 기법중 하나입니다. 

API 는 아래와 같습니다.

#include <linux/completion.h>

DECLEAR_COMPLETION(struct completion comp);
init_completion(struct completion *comp);
void wailt_for_completion(struct completion *comp);
void complete(struct completion *comp);
void complete_all(struct completion *comp);

1. wait 을 걸때

#include <linux/module.h> 
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/time.h>

struct completion comp;

static int wait(void)
{
  init_completion(&comp);
  wait_for_completion(&comp);


1. wait 을 풀때

#include <linux/module.h> 
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/time.h>

struct completion comp;

static int un_wait(void)
{
  complete(&comp);



풀 동작하는 샘플 코드는 아래와 같이 첨부 파일을 참조 바랍니다.

completion.c

Makefile

 
블로그 이미지

김유석0

,

일상사 2011. 10. 10. 14:56
아직 촬영 장비 준비가 완전치 않아서 망원경에 어퍼컬 방식으로 휴대폰을 이용하여 찍었습니다.



'일상사' 카테고리의 다른 글

우리 제이 돌잔치  (0) 2011.11.06
관악산  (0) 2011.10.31
관악산 등산  (0) 2011.08.07
관악산 잠자리  (0) 2011.08.07
십자가  (0) 2011.02.02
블로그 이미지

김유석0

,
리눅스 커널의 이해(Understanding Linux Kenel 3rd Edition) 의 전자북 버전입니다. 

 
무료배포버전이니 편하게 사용하십시요.  
블로그 이미지

김유석0

,
예를 들어 sync type api 인 crypto_alloc_hash() 가 있다고 치면

이 함수의 ASync type은 crypto_alloc_ahash() 로 명명한다.

이런 법칙을 알고 있으면 소스 분석할 때 도움이 될 것으로 생각된다. 


 

'development' 카테고리의 다른 글

[crypto] ASync Hash api  (0) 2011.10.12
[kernel] 동기화 기능. completion()  (0) 2011.10.10
[linux_kernel] scatterlist example  (0) 2011.09.27
[linux kernel]Scatter list  (1) 2011.09.27
[HW] TTL 과 RS232 에 대한 정리  (0) 2011.09.26
블로그 이미지

김유석0

,