可可熊的窝

Category Archives: 安全相关

Openssl建立SSL连接分析

IN:安全相关   Tags: ,    Comments:4

SSL_library_init();
SSL的初始化过程,只是添加一些算法,使用EVP_add_cipher函数。

ssl_method = SSLv3_client_method();
设置使用的SSL版本,SSLv3_client_method 函数的定义是通过IMPLEMENT_ssl3_meth_func(ssl/s3_clnt.c)这个宏来实现,而这个宏在ssl/ssl_locl.h 文件中实现,使用了粘贴宏的技巧来根据传入不同的函数名生成不同的函数定义。
SSLv3_client_method 定义了一组关于SSL V3的操作函数:

	static SSL_METHOD func_name##_data= {
		SSL3_VERSION,
		ssl3_new,
		ssl3_clear,
		ssl3_free,
		s_accept,
		s_connect,
		ssl3_read,
		ssl3_peek,
		ssl3_write,
		ssl3_shutdown,
		ssl3_renegotiate,
		ssl3_renegotiate_check,
		ssl3_get_message,
		ssl3_read_bytes,
		ssl3_write_bytes,
		ssl3_dispatch_alert,
		ssl3_ctrl,
		ssl3_ctx_ctrl,
		ssl3_get_cipher_by_char,
		ssl3_put_cipher_by_char,
		ssl3_pending,
		ssl3_num_ciphers,
		ssl3_get_cipher,
		s_get_meth,
		ssl3_default_timeout,
		&SSLv3_enc_data,
		ssl_undefined_void_function,
		ssl3_callback_ctrl,
		ssl3_ctx_callback_ctrl,
	};

SSL_CTX = SSL_CTX_new(ssl_method);
创建SSL_CTX这个结构体,进行初始化赋值操作,设置一些参数,使用默认的engine。openssl的engine是对基础的加密算法进行了封装,这样可以方便的对底层的加密算法进行替换,例如你可能使用硬件加密来替换掉openssl的软实现加密算法,而你所做的只是按照engine的接口实现相关的算法,然后设置engine的名字。例如U-KEY的RSA签名必须在硬件中完成,这时你就可以通过engine调用CSP来实现签名算法。

SSL_CTX_use_certificate_file(SSL_CTX,”client.cer”,SSL_FILETYPE_PEM)
设置客户端使用的证书,从文件中读取BASE64(SSL_FILETYPE_PEM这个参数指定)编码的证书,然后转换为openssl 的X509结构,提取公钥,设置SSL_CTX相关的结构。

SSL_CTX_use_PrivateKey_file(SSL_CTX, “client.key”, SSL_FILETYPE_PEM)
设置客户端使用的私钥,这种方式也是直接从文件中读取,更安全的方式是使用SSL_CTX_use_RSAPrivateKey(SSL_CTX, RSA),RSA是一个包含了RSA算法相关数据的结构体,这里定义了RSA算法相关的操作,在这里可以把私钥相关的算法操作使用自己的CSP来完成,而不是直接使用私钥完成。

SSL = SSL_new(SSL_CTX);
创建SSL 这个复杂的结构体。太多了,就不细说了。

SSL_set_fd(SSL, sock_fd);
设置连接使用的socket的fd,我们要做的socket操作只是得到这个fd,read,write操作将由openssl来完成。

SSL_connect(SSL);
这个函数将根据前面设置的SSL版本来进行相应的连接操作。

server_cert = SSL_get_peer_certificate(SSL);
得到服务器端的证书,下来可能要做一些服务器证书的验证,这里就省略了。

X509_free(server_cert);
SSL_write();
SSL_read();
接下来的操作就很好理解了.

http://code.google.com/p/cocobear/source/browse/trunk/openssl/openssl_test.cpp

上面写了一代简单的openssl进行HTTPS通信的代码,在Win和Linux下都可以运行,只是在socket操作有一点点的差异。

05-22
2009

CPU卡相关

IN:安全相关   Tags:    Comments:2

智能卡又称CPU卡。CPU卡内嵌芯片相当于一个特殊类型的单片机,内部除了带有控制器,存储器,时序控制逻辑等外,还带有算法单元和操作系统,由于CPU卡有存储容量大,处理能力强,信息存储安全等特性。因此,广泛用于信息安全性要求特别高的场合。

http://baike.eccn.com/eewiki/index.php/智能卡(CPU卡)

CPU卡在国内的最广泛应用应该是手机的SIM卡了,CPU卡要做应用一般都需要有一个上层的COS来支持,例如SIM卡就有基于GSM11.14和GSM11.11规范实现的COS。

COS是一个完整的系统,在结构上COS分为四大块:文件管理、安全机制、传输协议、命令解释。COS不是一个标准的操作系统,它是针对不同的应用来设计的,不过在一些底层的结构上还是基本相同的,比如文件管理、安全机制、传输协议,不同的应用在COS里体现在命令解释这一块。一般都有针对行业相关的命令标准,例如SIM卡相关的GSM11.11标准,金融相关的PBOC。关于CPU卡和COS最重要的规范就是ISO7816这一系列的标准,例如ISO7816-3规定了COS中的传输协议这一块,ISO7816-4规定了命令解释这一块,当然这里只是规定了最基本的一些命令,不同的应用可以有自己的扩展。 CPU卡在芯片级就做了很好的安全保护工作,比如对存放在CPU卡里数据的保密,以及CPU卡的物理攻击防范,举个简单的例子,你可能花很大的精力把一个CPU卡分解开(芯片的分层封装可以防卡轻松把一个CPU卡分解为ROM,CPU,EPROM等),得到的数据仍然是经过加密的。因此在很大程度上防止了卡的复制,而目前银行的磁条卡是很容易被复制的,只要知道卡号,密码和这个卡对应的一个随机数(据说可以直接读出来……而某些使用算法产生的也不安全,因为相关的算法很弱)就可以很轻松的复制出来一张银行卡。

国外很多银行已经开始采用基于CPU卡的银行卡,中国也有相应的标准出台:PBOC,不过涉及到数十亿磁条卡的更换,标准制定多年来一直没有得以推广,对于这种投资大(更换ATM机、POST终端、后台系统、人员培训),而不会有很明显回报的事,国内的银行还是表现的很”理智的”。

05-21
2009
loading...