|
socket连接多层程序安全性简述 - 数据 ( H m: q1 _$ u2 N5 O: o8 ^
. m- g% d( X9 L! A1 j5 Q
剩下三种数据包/数据包完整性/数据包保密性
4 q/ H$ m j' C/ ?8 B) t其实只是一种安全机制的不同级别实现而已 9 l9 A4 c, m3 Y/ G
数据包对发送者的身份加密,完整性和保密性 U2 z0 r' L5 q; F/ n) b, j9 B
是对其的有益补充
" h% I3 C( e/ x: ^3 W/ g7 G @6 A8 l+ \( w3 a
实际上数据包模式对发送者身份加密实现方法任意
( w# k8 D) s) Y" j C比如可以用Windows提供的那套加密库
: V, y% k1 z' M4 } W; R8 p& m呵呵,反正只要你在服务器端对其进行检验
0 O, {/ [# l6 T- i. Z% ~& K传送中途数据包被截留不会泄露发送人身份或 ) T: Y: m7 Y& N1 E, I, P ?+ _0 V2 D" M
可以证明发送人身份的数据即可 3 L/ ]+ e3 m$ U/ Y, ]. z5 h8 H
* h8 D8 t$ L7 \% S. r2 K
而完整性可以通过各种算法保证,比如crc,md5都是 " W% ^! t/ t3 x' s4 A
可行的,甚至简单一点按位and/or也不失一种办法 2 v8 n5 J/ R. Z% \
只是比较简陋罢了,呵呵,总之要保证数据不会被 0 y" m- W: u! Y. B/ I" y
中途截留者更改
0 d- B( e7 t! ?: U, b: z# B3 ~6 T, |
2 d2 H$ n' I4 a! E- T) a至于保密性,找一种对称加密算法对全部数据进行 / t4 l( f) o% R N5 ] ?9 w1 X
加密,然后将密匙用另外的非对称算法再次加密即可 9 p; \4 a* e8 D( H: n1 s
具体这方面的安全考虑问题可以看看《应用密码学》
* c: h* `2 t5 l0 u1 ^( C0 J4 g一书,非常不错的这方面的权威书籍
4 a8 c4 o1 @. b1 C 7 M+ ^7 X9 L/ Z# F+ g" B
这里需要提及的是这三种模式的实现, & T/ o9 N0 b; G% z7 K
简单一点的可以类似上一个呼叫模式中 8 { S9 K- s+ t& ]: j, z
在IAppServer::AS_GetRecords或者 0 [6 s0 k& P! H) M/ w/ r6 p J* y
其他类似的事件里面实现,参见上篇文章
% \2 m& ^) _# c# c, Y- @ $ X& ^, e8 R3 b' }
不过很幸运的是borland提供了一种更加简单可行的方案
0 j3 {8 R5 z BIDataIntercept接口
+ ]2 Q; ^7 t& P" I% m' L
' l) T* h* Y: x W7 P* i/ K; @# |__interface IDataIntercept; # ? ^! D& j! z% R
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept; ( y; [. ?# C8 y! j: t* \2 `
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
9 `& O6 K# Q! _+ c& Ytercept : public IUnknown
& v: t0 P9 k* y& P( F{
; m' f+ Q' U* Bpublic:
5 _# v. j7 M% j: N, D8 R virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; 6 K3 y" P9 z5 C' E
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
8 F7 k+ _. \) c0 H* J. k8 y) t}; 6 I' o- _8 o* s! I
他在TSocketConnection类传送数据时会自动被使用 $ a; t' N" e8 e5 `$ L
呵呵,用它实现数据完整性和保密性都是非常合适的选择
/ T5 d- `& q4 v3 R( x+ w外加还可以对数据进行压缩,呵呵
9 \, T7 Z7 B9 u- ?8 r具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
; n7 B( v+ m6 K. k( M, c* z0 } % ~* p% e4 H3 C/ H( g: X
MS对这几种安全机制的分类是高级别兼容低级别 5 j7 C3 P3 U8 C$ ]3 d, g3 f* g$ c
实际上在我们自己使用的时候完全可以根据我们的需要
: r/ w( J, |% s. U, q8 F* J自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案 0 ?' X' N9 U s* [. F i9 V
1 [( O' w6 `1 h. V7 B- y# ^btw:本来想随便写写,发现好像很多问题都几句话说不清 2 B9 f$ y/ G+ k9 O0 ^
等到下个月有时间偶把这些东东好好总结一下写篇
/ {' n: o, u/ y w1 F' [ 象样一点的文章出来,呵呵 % c- ~& W* ?& q, v' G7 y8 o
$ @4 R8 g6 Y) D* R7 r% Q" R1 |: H 其实这些安全模式的实现方式还有很多,偶只是挑出 . t/ h0 `: `% ?& j7 x- l
偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵 ) K# M- R6 F# j4 @6 l* g
希望能够对大家有帮助,也希望大家积极讨论,批评指正 |