socket连接多层程序安全性简述 - 数据
. i0 w0 l. ]0 z) |1 R/ H- f
剩下三种数据包/数据包完整性/数据包保密性
' U" [/ i7 N8 r! n其实只是一种安全机制的不同级别实现而已
数据包对发送者的身份加密,完整性和保密性
是对其的有益补充
$ D. ^$ W$ I4 H# x7 C" g+ P
实际上数据包模式对发送者身份加密实现方法任意
% O9 J* x* l! m+ U- C' f比如可以用Windows提供的那套加密库
0 F2 M3 |- J4 ~. H) e1 s呵呵,反正只要你在服务器端对其进行检验
4 h a( C6 u% g- f3 r+ h) z* _传送中途数据包被截留不会泄露发送人身份或
8 J+ w2 C" r$ S6 t1 ]9 I可以证明发送人身份的数据即可
- X" ^& `: a* L( Z
而完整性可以通过各种算法保证,比如crc,md5都是
2 ?4 b- H {& R4 d- K' R+ T. }. A可行的,甚至简单一点按位and/or也不失一种办法
0 c4 P- v2 q2 a: m2 u& [# l! s只是比较简陋罢了,呵呵,总之要保证数据不会被
. q/ ]9 l9 d* o4 o6 T" N, X中途截留者更改
4 e) m1 S: k. i* f* j( {+ Q" u: D% _% k1 j" p: F/ ^3 [
至于保密性,找一种对称加密算法对全部数据进行
h8 |% A( X# Y* f' y/ d8 Z加密,然后将密匙用另外的非对称算法再次加密即可
7 U( } j/ C7 }" C! h5 R具体这方面的安全考虑问题可以看看《应用密码学》
2 Z3 t Q% y5 u' }* G$ Q一书,非常不错的这方面的权威书籍
% r. e- O# p4 D6 t7 ~5 ]( o
这里需要提及的是这三种模式的实现,
: i: ~" Y& T3 H简单一点的可以类似上一个呼叫模式中
在IAppServer::AS_GetRecords或者
其他类似的事件里面实现,参见上篇文章
: L( c+ P' \/ D, U: K
不过很幸运的是borland提供了一种更加简单可行的方案
IDataIntercept接口
- S+ f1 H0 z3 ~# X4 a2 x" L: ]
__interface IDataIntercept;
0 S3 ?2 s; U' r0 c/ v% m2 T# i/ gtypedef System:
elphiInterface<IDataIntercept> _di_IDataIntercept;
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
0 @3 }( y- |; L0 x5 r& K! f1 vtercept : public IUnknown
{
$ Q6 C0 ?" J8 tpublic:
$ L* \8 _! D; G4 {9 dvirtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ;
# h% @+ r0 {7 }. Uvirtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
};
他在TSocketConnection类传送数据时会自动被使用
呵呵,用它实现数据完整性和保密性都是非常合适的选择
外加还可以对数据进行压缩,呵呵
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
4 s# x2 F; d& p' i9 Y& J2 o6 `8 j/ ~/ k: z
MS对这几种安全机制的分类是高级别兼容低级别
实际上在我们自己使用的时候完全可以根据我们的需要
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
btw:本来想随便写写,发现好像很多问题都几句话说不清
等到下个月有时间偶把这些东东好好总结一下写篇
象样一点的文章出来,呵呵
其实这些安全模式的实现方式还有很多,偶只是挑出
5 |9 H! ?+ G7 e7 p# z' b1 _偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
' Q! t. Y8 d8 t Z 希望能够对大家有帮助,也希望大家积极讨论,批评指正
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |