| 48 |
#define DEATTACK_DETECTED 1 |
#define DEATTACK_DETECTED 1 |
| 49 |
|
|
| 50 |
/* |
/* |
| 51 |
* $Id: crypt.c,v 1.12 2007-08-20 14:21:57 maya Exp $ Cryptographic attack |
* $Id: crypt.c,v 1.13 2007-10-16 15:28:14 maya Exp $ Cryptographic attack |
| 52 |
* detector for ssh - source code (C)1998 CORE-SDI, Buenos Aires Argentina |
* detector for ssh - source code (C)1998 CORE-SDI, Buenos Aires Argentina |
| 53 |
* Ariel Futoransky(futo@core-sdi.com) <http://www.core-sdi.com> |
* Ariel Futoransky(futo@core-sdi.com) <http://www.core-sdi.com> |
| 54 |
*/ |
*/ |
| 214 |
|
|
| 215 |
|
|
| 216 |
// for SSH2(yutaka) |
// for SSH2(yutaka) |
| 217 |
|
// 事前に設定する鍵長が違うだけなので、AES256 でも |
| 218 |
|
// cAES128_encrypt/cAES128_decrypt を使用できる (2007.10.16 maya) |
| 219 |
static void cAES128_encrypt(PTInstVar pvar, unsigned char FAR * buf, |
static void cAES128_encrypt(PTInstVar pvar, unsigned char FAR * buf, |
| 220 |
int bytes) |
int bytes) |
| 221 |
{ |
{ |
| 655 |
|
|
| 656 |
} else { // for SSH2(yutaka) |
} else { // for SSH2(yutaka) |
| 657 |
// SSH2がサポートするデータ通信用アルゴリズム(公開鍵交換用とは別) |
// SSH2がサポートするデータ通信用アルゴリズム(公開鍵交換用とは別) |
| 658 |
cipher_mask = (1 << SSH_CIPHER_3DES_CBC) | (1 << SSH_CIPHER_AES128); |
cipher_mask = (1 << SSH_CIPHER_3DES_CBC) |
| 659 |
|
| (1 << SSH_CIPHER_AES128) |
| 660 |
|
#ifdef SSH2_BLOWFISH |
| 661 |
|
| (1 << SSH_CIPHER_BLOWFISH) |
| 662 |
|
#endif |
| 663 |
|
| (1 << SSH_CIPHER_AES256); |
| 664 |
} |
} |
| 665 |
|
|
| 666 |
sender_ciphers &= cipher_mask; |
sender_ciphers &= cipher_mask; |
| 1099 |
|
|
| 1100 |
enc = &pvar->ssh2_keys[MODE_OUT].enc; |
enc = &pvar->ssh2_keys[MODE_OUT].enc; |
| 1101 |
cipher_init_SSH2(&pvar->evpcip[MODE_OUT], |
cipher_init_SSH2(&pvar->evpcip[MODE_OUT], |
| 1102 |
enc->key, 24, enc->iv, 8, |
enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher), |
| 1103 |
|
enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher), |
| 1104 |
CIPHER_ENCRYPT, |
CIPHER_ENCRYPT, |
| 1105 |
EVP_des_ede3_cbc); |
get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher)); |
| 1106 |
|
|
| 1107 |
//debug_print(10, enc->key, 24); |
//debug_print(10, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher)); |
| 1108 |
//debug_print(11, enc->iv, 24); |
//debug_print(11, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher)); |
| 1109 |
|
|
| 1110 |
pvar->crypt_state.encrypt = c3DES_CBC_encrypt; |
pvar->crypt_state.encrypt = c3DES_CBC_encrypt; |
| 1111 |
break; |
break; |
| 1113 |
|
|
| 1114 |
// for SSH2(yutaka) |
// for SSH2(yutaka) |
| 1115 |
case SSH_CIPHER_AES128: |
case SSH_CIPHER_AES128: |
| 1116 |
|
case SSH_CIPHER_AES256: |
| 1117 |
{ |
{ |
| 1118 |
struct Enc *enc; |
struct Enc *enc; |
| 1119 |
|
|
| 1120 |
enc = &pvar->ssh2_keys[MODE_OUT].enc; |
enc = &pvar->ssh2_keys[MODE_OUT].enc; |
| 1121 |
cipher_init_SSH2(&pvar->evpcip[MODE_OUT], |
cipher_init_SSH2(&pvar->evpcip[MODE_OUT], |
| 1122 |
enc->key, 16, enc->iv, 16, |
enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher), |
| 1123 |
|
enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher), |
| 1124 |
CIPHER_ENCRYPT, |
CIPHER_ENCRYPT, |
| 1125 |
EVP_aes_128_cbc); |
get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher)); |
| 1126 |
|
|
| 1127 |
//debug_print(10, enc->key, 24); |
//debug_print(10, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher)); |
| 1128 |
//debug_print(11, enc->iv, 24); |
//debug_print(11, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher)); |
| 1129 |
|
|
| 1130 |
pvar->crypt_state.encrypt = cAES128_encrypt; |
pvar->crypt_state.encrypt = cAES128_encrypt; |
| 1131 |
break; |
break; |
| 1172 |
struct Enc *enc; |
struct Enc *enc; |
| 1173 |
|
|
| 1174 |
enc = &pvar->ssh2_keys[MODE_IN].enc; |
enc = &pvar->ssh2_keys[MODE_IN].enc; |
| 1175 |
cipher_init_SSH2(&pvar->evpcip[MODE_IN], |
cipher_init_SSH2(&pvar->evpcip[MODE_IN], |
| 1176 |
enc->key, 24, enc->iv, 8, |
enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher), |
| 1177 |
|
enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher), |
| 1178 |
CIPHER_DECRYPT, |
CIPHER_DECRYPT, |
| 1179 |
EVP_des_ede3_cbc); |
get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher)); |
| 1180 |
|
|
| 1181 |
//debug_print(12, enc->key, 24); |
//debug_print(12, enc->key, 24); |
| 1182 |
//debug_print(13, enc->iv, 24); |
//debug_print(13, enc->iv, 24); |
| 1187 |
|
|
| 1188 |
// for SSH2(yutaka) |
// for SSH2(yutaka) |
| 1189 |
case SSH_CIPHER_AES128: |
case SSH_CIPHER_AES128: |
| 1190 |
|
case SSH_CIPHER_AES256: |
| 1191 |
{ |
{ |
| 1192 |
struct Enc *enc; |
struct Enc *enc; |
| 1193 |
|
|
| 1194 |
enc = &pvar->ssh2_keys[MODE_IN].enc; |
enc = &pvar->ssh2_keys[MODE_IN].enc; |
| 1195 |
cipher_init_SSH2(&pvar->evpcip[MODE_IN], |
cipher_init_SSH2(&pvar->evpcip[MODE_IN], |
| 1196 |
enc->key, 16, enc->iv, 16, |
enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher), |
| 1197 |
|
enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher), |
| 1198 |
CIPHER_DECRYPT, |
CIPHER_DECRYPT, |
| 1199 |
EVP_aes_128_cbc); |
get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher)); |
| 1200 |
|
|
| 1201 |
//debug_print(12, enc->key, 24); |
//debug_print(12, enc->key, 24); |
| 1202 |
//debug_print(13, enc->iv, 24); |
//debug_print(13, enc->iv, 24); |
| 1284 |
return "3DES-CBC"; |
return "3DES-CBC"; |
| 1285 |
case SSH_CIPHER_AES128: |
case SSH_CIPHER_AES128: |
| 1286 |
return "AES128"; |
return "AES128"; |
| 1287 |
|
case SSH_CIPHER_AES256: |
| 1288 |
|
return "AES256"; |
| 1289 |
|
|
| 1290 |
default: |
default: |
| 1291 |
return "Unknown"; |
return "Unknown"; |