数学建模社区-数学中国

标题: socket连接多层程序安全性简述 - 数据 [打印本页]

作者: 韩冰    时间: 2005-1-26 01:11
标题: socket连接多层程序安全性简述 - 数据

socket连接多层程序安全性简述 - 数据

: l" j4 Z: U9 P2 |4 S3 ]

& R4 ]! w8 M5 D2 A/ s. E; C7 R

剩下三种数据包/数据包完整性/数据包保密性

) F1 e. I/ E4 o6 f) m3 v f0 C

其实只是一种安全机制的不同级别实现而已

! i! R. s# T% ]$ j& J

数据包对发送者的身份加密,完整性和保密性

$ U x5 O% m" u; g

是对其的有益补充

/ F* d9 W; J' x5 x( ]4 ?

1 g4 f$ C3 `& F( s8 d4 f$ K! @, G9 ]

实际上数据包模式对发送者身份加密实现方法任意

5 [4 e+ e4 t( I6 G4 ~

比如可以用Windows提供的那套加密库

) d$ V1 H3 \5 D) k8 D

呵呵,反正只要你在服务器端对其进行检验

- c9 Z5 l @* Y9 R( r3 m4 }3 Z

传送中途数据包被截留不会泄露发送人身份或

0 s8 V! h9 e& P, t+ @7 O

可以证明发送人身份的数据即可

/ C( L; M! n, B0 r! x

5 C4 f, d, U! G' f

而完整性可以通过各种算法保证,比如crc,md5都是

! u) s; G0 w2 R3 f- G! [5 F- u7 }

可行的,甚至简单一点按位and/or也不失一种办法

( s" `% M3 T! S3 V0 b

只是比较简陋罢了,呵呵,总之要保证数据不会被

" a+ j/ H2 O- c+ H6 ?

中途截留者更改

9 S. \2 Z7 A# ]2 C

5 n* q" r0 G9 H$ M: n" T

至于保密性,找一种对称加密算法对全部数据进行

; B2 c8 p; b* g8 E! S n+ B# w# r

加密,然后将密匙用另外的非对称算法再次加密即可

5 J( E+ p' Z( U+ h8 I( @+ p2 d5 ^( L

具体这方面的安全考虑问题可以看看《应用密码学》

$ ?% t7 G: c* L7 i( R. I4 f# c

一书,非常不错的这方面的权威书籍

4 l0 u8 O8 \0 A: D

& q8 s6 R# Y: H6 l" ^

这里需要提及的是这三种模式的实现,

- w3 e3 C: B8 n& }; S# x! A

简单一点的可以类似上一个呼叫模式中

: ?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提供了一种更加简单可行的方案

# z( w' B0 e) i8 z7 ]& A

IDataIntercept接口

X9 R4 H( @! {9 C8 B6 ], u( n# t4 V

0 E! C: }8 N. y" o+ J, H& {

__interface IDataIntercept;

) D- y5 r( y8 Q5 H

typedef System:elphiInterface<IDataIntercept> _di_IDataIntercept;

; _+ L( e5 ?4 K/ q( e- ^8 W% e

__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn

\/ d6 b3 Q& V7 j4 `4 k% Y

tercept : public IUnknown

8 m$ `" G3 z! ~7 R3 C% K

{

/ ]1 H/ `( E5 Q% E7 y

public:

: \$ \" `) V- W" M5 C' Y8 l' _

virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ;

9 X/ n7 F4 r% n7 ^8 ]' y/ z" K4 I' h

virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;

0 y& R5 p# R/ u

};

: F/ v! v$ ~2 Q1 O9 K. i; F6 F0 E* M

他在TSocketConnection类传送数据时会自动被使用

$ D$ E3 O5 H. X8 s

呵呵,用它实现数据完整性和保密性都是非常合适的选择

, j7 C6 H# j2 [. |& Z+ p

外加还可以对数据进行压缩,呵呵

% k3 s; W; `9 l+ C

具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子

) s8 g7 E" m" K6 J: v

V! V" u) p9 B; n- W

MS对这几种安全机制的分类是高级别兼容低级别

; B5 p3 K# D7 W

实际上在我们自己使用的时候完全可以根据我们的需要

4 Q8 N( S0 _% o( q

自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案

% n* j m; h' B. A8 a( ?2 U! m

6 j' D' n, m: m# ?( M v

btw:本来想随便写写,发现好像很多问题都几句话说不清

& ^! A7 G; S& G! V% F' p% A

等到下个月有时间偶把这些东东好好总结一下写篇

1 W- p0 `1 A7 m( t, u7 `: Y

象样一点的文章出来,呵呵

) u4 J' J' S3 }0 m

) W2 O. }7 K8 ?8 x, a$ r

其实这些安全模式的实现方式还有很多,偶只是挑出

8 o3 d: ?8 P: b% H. K9 \

偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵

6 W5 O0 K8 l" ^

希望能够对大家有帮助,也希望大家积极讨论,批评指正






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5