socket连接多层程序安全性简述 - 数据
: l" j4 Z: U9 P2 |4 S3 ]
剩下三种数据包/数据包完整性/数据包保密性
) F1 e. I/ E4 o6 f) m3 v f0 C其实只是一种安全机制的不同级别实现而已
数据包对发送者的身份加密,完整性和保密性
$ U x5 O% m" u; g是对其的有益补充
实际上数据包模式对发送者身份加密实现方法任意
比如可以用Windows提供的那套加密库
呵呵,反正只要你在服务器端对其进行检验
- c9 Z5 l @* Y9 R( r3 m4 }3 Z传送中途数据包被截留不会泄露发送人身份或
可以证明发送人身份的数据即可
/ C( L; M! n, B0 r! x
而完整性可以通过各种算法保证,比如crc,md5都是
可行的,甚至简单一点按位and/or也不失一种办法
( s" `% M3 T! S3 V0 b只是比较简陋罢了,呵呵,总之要保证数据不会被
" a+ j/ H2 O- c+ H6 ?中途截留者更改
9 S. \2 Z7 A# ]2 C5 n* q" r0 G9 H$ M: n" T
至于保密性,找一种对称加密算法对全部数据进行
加密,然后将密匙用另外的非对称算法再次加密即可
5 J( E+ p' Z( U+ h8 I( @+ p2 d5 ^( L具体这方面的安全考虑问题可以看看《应用密码学》
$ ?% t7 G: c* L7 i( R. I4 f# c一书,非常不错的这方面的权威书籍
& q8 s6 R# Y: H6 l" ^
这里需要提及的是这三种模式的实现,
简单一点的可以类似上一个呼叫模式中
: ?1 U# B1 x; x- z F( D在IAppServer::AS_GetRecords或者
, B. f# h0 L$ [9 B ]5 n, s$ _4 b其他类似的事件里面实现,参见上篇文章
. t* @! u, U% F7 y: i: A( K9 [# N, @$ f* u
不过很幸运的是borland提供了一种更加简单可行的方案
IDataIntercept接口
__interface IDataIntercept;
typedef System:
elphiInterface<IDataIntercept> _di_IDataIntercept;
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
tercept : public IUnknown
{
/ ]1 H/ `( E5 Q% E7 ypublic:
virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ;
9 X/ n7 F4 r% n7 ^8 ]' y/ z" K4 I' hvirtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
};
他在TSocketConnection类传送数据时会自动被使用
$ D$ E3 O5 H. X8 s呵呵,用它实现数据完整性和保密性都是非常合适的选择
外加还可以对数据进行压缩,呵呵
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
MS对这几种安全机制的分类是高级别兼容低级别
实际上在我们自己使用的时候完全可以根据我们的需要
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
btw:本来想随便写写,发现好像很多问题都几句话说不清
& ^! A7 G; S& G! V% F' p% A等到下个月有时间偶把这些东东好好总结一下写篇
1 W- p0 `1 A7 m( t, u7 `: Y象样一点的文章出来,呵呵
) W2 O. }7 K8 ?8 x, a$ r
其实这些安全模式的实现方式还有很多,偶只是挑出
偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
希望能够对大家有帮助,也希望大家积极讨论,批评指正
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |