自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (4)
  • 收藏
  • 关注

原创 windows的又一个问题

最近在看ipset的代码,ipset实现了一个ip地址集合的操作,是linux中netfilter的操作子集,ipset在netfilter中起作用,它的逻辑很简单,基本是纯算法的,很少涉及到内核调试,所以想详细研究一下,因为工作机是windows的,于是不得不将压缩包拷贝到windows,用winrar解压,解压之后开始看代码,没有发现match的注册,按理说每个匹配操作都应该有一个match函

2010-04-29 19:06:00 17276 1

原创 ECC算法分析--我们国家的标准

了解了前面说的ecc的概念之后,我们就知道group的意义了,实际上group定义了一条曲线,定义了a,b,还有order等等,在openssl的实现中,group中还有一个EC_METHOD结构体,这个结构体中有一系列的函数,顾名思义这些函数是用来操作曲线的,可以看到这个method没有engine的支持,这是为什么呢?因为ecc的创立者根本就不把ecc算法所应用的曲线作为算法的一部分来考虑,也

2010-04-29 18:50:00 7624 5

原创 华丽之下的平台左右着一切

楚人一炬,可怜焦土!再华丽的阿房宫在暴力的围攻下,终成焦土!君不见玉环飞燕皆尘土!我在欣赏华丽的同时,同时感到一阵悲哀,再好的舞台下面一旦坍塌,舞台的华丽终成灰烬!

2010-04-28 22:24:00 17179

原创 伍佰的一句歌词

伍佰《突然间的自我》中有一句词“喝了这一杯还有一杯,再喝了这一杯还有三杯”,这是为什么呢?伍佰不会数数吗?其实不是的,真实的情况是他中奖了。我在长春的时候曾经买了一袋瓜子,然后中了一袋,然后连续中了七袋,于是我也会唱:吃了这一袋,还有一袋,再吃了这一袋,还有七袋,吃完这第七袋,人家说这是假的,不给兑奖了!仔细一想,真的很搞笑

2010-04-28 22:17:00 18027 7

原创 ECC算法分析--数学背景-自上而下的方式

可以把ecc理解为是曲线域上的rsa,当然只能这么理解,它们即使放到一个域内也是有很大不同的,导致它们分别可以被应用的数学难题就不同。既然可以理解为曲线域上的rsa(或者曲线域上的dh,dsa等),那么就应该知道rsa,dsa,dh等都是在什么域上的,其实它们都是在素数域上的,所有的素数域都是一样的,所以对于rsa,dsa或者dh来讲,都是可以直接计算的,比如要产生一个大素数,那么就直接产生好了,

2010-04-28 22:08:00 6821

原创 ECC算法分析--openssl的实现以及其调用流程

ecc的过程与rsa相比有很大的不同,ecc涉及到了很多额外的概念,比如group等等,另外ecc包含两套截然不同的机制,这就是ecdsa和ecdh,这两套机制统一于ecc,在非ecc算法中,这两套机制是由两个独立的算法实现的,比如对于加密/解密以及签名/验证这一类需求来说使用的是rsa,dsa,对于密钥协商这一类需求来说使用的是dh,如何把这两类算法统一到一个结构中是类似openssl等框架需要

2010-04-28 22:05:00 27552 7

原创 及时的感悟

今天用到了阿贝尔群,也不能说是用,只是我这个人比较贱,工作任务中基本不需要知其所以然,而我不喜欢悬在半空中,于是就复习了阿贝尔群。如果不理解“抽象”的概念,那么你很难理解椭圆曲线上的“加法”的概念,而理解了抽象之后,你会发现,椭圆曲线上的加法和我们小学学习的加法只是群这个概念的一个实例罢了,“群”在更高的层次上定义了加和乘的概念,只是定义了概念而没有定义规则。有了这些抽象的概念,比如交换律,结合律

2010-04-21 23:02:00 17414 1

原创 wild cat

她就是一只疯猫,just a cat!!疯了扒顶棚,静了吃好多鱼,要么就是睡,洗,搬!唉!...疯猫啊,希望疯猫多一些思考哦....思考一下鱼或者老鼠会在什么地方,然后抓住它们....

2010-04-19 14:32:00 4073 1

原创 纺锤和沙漏--世界最完美的两种模型

纺锤向两端归一,沙漏向中间归一,完美,真的很完美。osi网络模型最终成了沙漏,ip成了归一点,而世界历史成了纺锤,一开始文明由一个地方产生,然后分化,现在又是全球化。可以看出,如果一开始一件事就是分散的,那么就会是沙漏模型,强制将一切归一了,但是内秉的力量还是将一切分开了,反过来如果一开始就是统一的,那么虽然中间历经磨难,分崩离析,最终还是要统一。osi-tcp/ip一开始面临的问题就是设备异构化

2010-04-15 23:23:00 4778

原创 asn浅析--协议的设计

协议是分层的,但是它原本就是分层的吗?或者说它只有分层这一种形式吗?作为一种替代方案,基于消息的模型也一样能工作的很好,不一定要分层,就像很多应用层的协议比如http或者sip那样,基于消息的协议模型中,空间上纵向的层次化为了时间上横向的不同消息,比如有专门寻址的消息,有专门差错控制的消息等等,基于消息的协议同样可以适配各种不同的网络结构以至于最终适配不同的网络设备,只要这些设备都能处理特定的消息

2010-04-15 23:07:00 18731

原创 asn浅析--简单介绍

asn1是一种自组织自定义的数据结构,它是自洽的,几乎不需要外界的参与就能自己解释自己,这就做到了与机器无关,与应用无关,尽可能的与环境无关,这就是它最大的优势。那么到底什么是asn结构呢,简单说它就是一个嵌套的三元组,复杂得说它可以写一本厚书,甚至好几本。所以还是简单的理解它吧,以下用asn指代其最显然的编码形式--ber格式,因为本文基于ber格式介绍,并不涉及更多抽象语法方面的asn定义,a

2010-04-14 22:04:00 19286

原创 实现一个可以用web配置的防火墙

endian是一个可基于web配置的防火墙,2006年就知道它了,只是具体是怎么做的我也没有研究过,因为没有时间,最重要的是那时我根本不知道什么是防火墙,也不从来没有使用过linux(期末考linux的时候,我带了小抄),现在琢磨起来应该也不会很难,但是可以自己实现一个拥有类似功能的,虽然很丑陋但是可以完成基本的web配置功能。本次行动要用到的知识点有xml,xsl,php等等。xml是一种将

2010-04-13 21:35:00 18038

原创 关于linux中nat实现的一些思考

DNAT主要是用于保护nat内侧的服务器,针对外部主动连接内部的情形,而SNAT恰恰相反,为了保护和限制内部的网络客户机,针对的是内部主动连接外部的情形,在linux中,nat是基于连接跟踪模块起作用的,连接跟踪模块将每一个数据包试图和一个连接关联,结果就是要么这个数据包属于一个已经存在的连接,要么这个数据包不属于任何一个已经存在的连接,这种情况下连接跟踪模块将要为此数据包创建一个连接,显然该数据

2010-04-13 21:33:00 5254 3

原创 openssl的vs/vc工程配置与make

openssl在windows上的编译方式很多人都了解,然而很多人因为习惯于windows的ide又很想知道如何在vs2005之类的ide中点击“生成”菜单项编译openssl,然后点击上面的那个绿色的小箭头调试或者单步跟踪,那是一件多么轻松的事情啊,要比在命令行上运行perl ... &ms/do_ms&nmke...轻松多了,遗憾的是,由于vs的ide和命令行的makefile并不是一个级别的

2010-04-11 15:58:00 6827 2

原创 汉字的音义独立性以及日语的特殊性

汉字是方块的,田字型的,从上到下从左到右的顺序,两个维度,多个自由度,汉字从一开始就不是表音的,它更多的是表达一样东西,它不是语言学意义上的,而只是描述意义的,它因此更像绘画,它并不是一种交流意义上的规则从而使交流变得更容易,而是为了描述一些东西,描述一些事实,汉字的复杂结构也使得学习很不容易。由于汉字是描述意义的,因此如果在现实中没有对应的东西,那么很难使新的汉字被创造,因此这样的结果就是汉字对

2010-04-10 23:30:00 17975 1

原创 关于计算机的一点思考

人们会认为计算机比人更有效率而不是更聪明,实际上计算机并不是和人并列的事物,而只是在人的思维和实践连线延长线上的一点,如果你认为那些博士们能做出什么巧妙的算法从而是计算机拥有智能,那只能说明这是那些博士们的智能,计算机可以计算但是不能思维,不能归纳总结,没有分析综合的能力,我们看一下解方程的过程:2x+7=13;任何人都知道在等式两端都减去7,然后再等式两端都除以2,然而这种方式虽然简单但

2010-04-10 23:28:00 3147

原创 一个“粘贴”问题引发的思考

我在“我的电脑”中直接粘贴一个文件被NT-OS提示"不能保存在指定位置",这个指定位置是我的电脑,然而在linux中却不存在这样的地方,因此windows虽然总倾向于统一的管理一切,在磁盘管理上却没有提供一个统一的视图,竟然在统一盘符和不同盘符下,“拖动”文件会是不同的结果,这难到是统一吗?既然企图一切都统一,那么为何提供磁盘之上比如诸如“我的电脑”之类的视图呢?像unix/linux那样从“/”

2010-04-09 23:15:00 17065

原创 openssl中关于engine的部分代码分析

engine在openssl中是一个重要的概念,它提供了一种重载默认算法的方式,首先看一下engine结构体:struct engine_st {        const char *id;        const char *name;        const RSA_METHOD *rsa_meth;    ...//众多类似的结构体,描述dsa,dh,随机数等方法

2010-04-09 22:59:00 9292 1

原创 对kerberos的理解--经典对话读后

kerberos是一个基于对称密钥的认证系统,事实上它有时候比基于非对称密钥的pki工作的更好,特别是在小规模网络架构时,管理上更加集中和方便,甚至效率更高。那篇经典对话相信很多人都能将之读完,但是读完之后同样很多人需要时间来消化,事实上那篇对话并不仅仅是在讲kerberos的原理,它更多的意义在于展示了一种研究问题的方法,从简单到复杂,一点一点的弥补漏洞,最终加上众多的权衡,得到一个既安全又高效

2010-04-09 22:58:00 6198

转载 Kerberos原理--经典对话

这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原理而写的一篇对话集。里面有两个虚构的人物:Athena和Euripides,通过 Athena不断的构思和Euripides不断的寻找其中的漏洞,使大家明白了Kerberos协议的原理。  Athena: 雅典娜,智慧与技艺的女神。  Euripides:欧里庇得斯,

2010-04-09 21:48:00 15183 10

原创 评价linux协议栈tcp实现中的prequeue

对tcp-ack的影响:某种情形之下只有用户进程处理了这个skb的时候才发送ack。如果skb直接排入receive_queue的话,那么很可能直接就会发送skb,但是如果排入了prequeue,那么只有到了进程的上下文处理prequeue的时候才会处理ack应答,理论上如果这个进程很久才能被进程调度器调度到,那么很久才会发送ack,linux的解决办法是设置一个timer,规定一个阀值到期,到期

2010-04-08 21:42:00 5469 3

原创 tcp是一个复杂的协议

tcp是一个很复杂的协议,这是每个人都知道的,但是它是很重要的,超过半数的公司在应届生面试时会提供tcp三次握手的面试题,我当年就碰到了N次,只可惜我对网络比较了解,这件事几乎没有给我带来什么故事。     在理解tcp之前,如果有机会看一些理论知识,那么就会知道tcp实际上只是一种可靠连接的实现方式,可靠连接这种理论基本分为GBN和SR两种,当然从实践上分析还有二者的结合,如果细致的分析,二

2010-04-07 23:14:00 17925

原创 linux内核中协议栈--tcp实现的一点细节

tcp_recvmsg中的release_sock,如有接收到的包,都必须往backlog链表中添加,在__release_sock之后sk->sk_lock.owner = NULL,表明此时的sock拥有进程上下文,并且还没有人使用,那么此时进入的包可以有机会进入prequeue队列,此时的backlog队列和receive_queue已经清空,此时进入prequeue的设为数据1,然后又锁住

2010-04-07 21:39:00 7328

原创 ssl的消息读写以及和tcp语义的异同

SSL实现必须读取整条记录,哪怕select返回了一个字节可读,那么ssl也要读取整个记录,这种基于纪录的读写方式就是为了正确的加密个解密。因此如果用select模型的话可能会出现一些莫名其妙的问题,事实上也正是ssl消息需要加密解密从而需要整个消息整个消息读写才使得ssl协议的行为和tcp的有了少有的不一致。     tcp的特点是流式传输,流式的特点就是没有消息边界,一个连接就是一个流,需

2010-04-06 21:34:00 9689 2

原创 linux的lsm--TCB组成部分的新视角

可信路径的一端是任意用户,另一端是TCB,这条路经要做到尽可能短,从而加大消息在中间被拦截的难度,事实上,可信路径上的消息时不能被拦截的,否则就不叫可信路径了,可信路径的一端必须是绝对可信的,我们称为TCB,也就是可信计算基,然而TCB并不仅仅存在于可信路径的另一端,TCB是一整套安全环境的总称,包括很多元素,比如硬件隔离机制,OS内核的一切组件,事实上,TCB是一个抽象的概念而不是一个形象的实体

2010-04-06 21:32:00 3714

原创 一种有效的新人培养方式

很多事实并没有实力的人顺利的度过了试用期,很多事实很有实力的人最终做了类似烧锅炉的工作,如何避免这两种情况,有一种方略很实用,那就是在试用期的时候逐步给新员工加压,我说的是工作难度逐步加大压力,直到该员工到达极限,这样第一,如果此人是来混日子,那么他受不了几个级别的压力就会放弃,如果此人很有实力,那么他肯定能到达他的极限,一切通过后此人就做他的接近极限的工作,那么他就再也不用抱怨施展不开了,顺便,

2010-04-05 18:19:00 17351 1

原创 请不要忘记本质—ssl的握手方式

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

2010-04-05 17:49:00 2720

原创 openssl中算法的组织方式

openssl为了支持可插拔的算法采用了engine,这里面有一些专利原因和政治原因,暂且掠过。在说engine之前首先看看算法的组织方式,其实如果你完全明白了这种组织,那么engine就是一个自然而然的结果了。首先看一下openssl中是如何组织算法的: 图表已经很清晰了,如果非要解释一下的话,那么就看下面的文字:openssl首先将所有的算法分成几个大的类别,每一个类别有一个所谓的ta

2010-04-05 17:31:00 3576

原创 中西方历史发展和根源

西方的封建领主制和中国的封建领主制是在不同的历史背景下建立的,但是同样都是在统一国家的国王无力进行全国管理得情况下建立的,西方的封建领主制建立的背景是经济落后,商业交流匮乏,这种背景并不是自身导致的,而是由于蛮族入侵和穆斯林的入侵导致的,和中国一样,他们也需要重新统一,但是到达拥有统一能力的时候,西方已经是多元化了,这种多元化被封建领主制度所促进,因此这种生产力和政治制度的同步发展最终形成了现代欧

2010-04-05 16:01:00 17183 4

原创 历史发展和根源

欧洲的历史发展有没有什么必然性,我们中国的历史呢,假期花了一下午时间做了两张图,首先看一下欧洲的(图片在相册中):  下面是中国的:

2010-04-04 22:40:00 2725

原创 unix更喜欢进程,可是...

unix是按照进程组织作业的,因为起初人们使用计算机系统就是要分时处理各个作业,那时并没有现在的各种复杂且多样化的应用,也不需要什么进程间的通信,甚至不需要复杂IO,进程的传统一直沿用至今,极端的Eric在《unix编程艺术》中大肆鼓吹小进程的妙用,鼓吹unix的优良传统,此人的极端源自于他对unix的酷爱,源自于他对unix的深入理解,而我们要想从肤浅层次去理解这件事,那就不是很容易了,看看un

2010-04-03 21:18:00 2734 3

原创 OpenSSL状态机中可选消息的处理

openssl在实现ssl握手的时候是用状态机实现的,实际上linux内核的tcp协议也是状态机实现的,原因就在于这些协议本身的握手规则就是状态机(简直是废话)。SSLv3握手规则要比tcp复杂的多,因此它的实现如果要既美观又高效的话就一定需要很多技巧,造成这种结果的原因就在于ssl握手过程中存在很多的可选消息,而这些可选消息是否存在并不简单依赖与前一个或者前若干个消息的消息头,而只有解析了前面的

2010-04-03 20:18:00 4358

原创 ssl中的两个BIO--ssl以及ipsecl的一些概念

ssl中有两个BIO,一个是读方向的,另一个是写方向的,也就是rbio和wbio,一般情况下它们是同一个bio,这是因为一般而言的ssl是在tcp上建立的,而实际上它也可以建立在管道或者内存缓冲区等任意的文件描述符上,只要你提供一个正确的证书,openssl就可以完成连接,而不管下面是一个tcp连接还是说下面只有两个管道,ssln_server/client_method里面的回调函数完成了这一切

2010-04-01 23:37:00 17564

原创 linux系统中的/dev/random

随机数对于密码密钥来说是很重要的,比如RSA算法,比如DH算法,那么如何产生随机数呢,我们不能指望机器能产生随机数,真正随机的是人,只有人才是真正随机的,人们可以通过不确定的对电脑的行为才产生随机,比如键盘敲击,比如鼠标点击和鼠标位移,以及两次敲击和点击之间的间隔,这些都可以被认为是随机的根源,并且也可以认为只有这这样是随机的。/dev/random就是为这一过程服务的,每当有键盘或者鼠标以及诸如

2010-04-01 23:36:00 4505

原创 openssl中的STACK操作实现了一个自动增加的堆栈

利用STACK_OF宏可以快速实现一个自动增长的堆栈,由于堆栈可以作为一个数组来使用,所以OpenSSL中很多地方都使用了。STACK_OF宏来实现大小不固定的数组。typedef struct stack_st {    int num;      //当前的堆栈元素数量    char **data;  //堆栈元素,其实就是一系列的指针    int sorted;   

2010-04-01 23:13:00 6899 3

原创 openssl中的一个bug--附带asn1的点点滴滴

openssl的源代码中有一个我自认为的bug,可能作者有意这么做,然而我却认为它是bug,起码我在验证证书序列号的号的时候,它出了问题。问题是这样的:用以下命令openssl x509 -in somecert -serial -noout可以输出一个证书的序列号,然而当该证书的序列号的第一个字节与数字0x80按位与之后的结果非0的话,那么就会将该数作为负数来对待,如果不信的话,那么你挑

2010-04-01 23:11:00 4493

原创 ssl证书链的验证的其它方式

<!--v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}--> Normal 0 7.8 磅 0 2

2010-04-01 22:37:00 7727 1

原创 openssl的证书链验证

使用openssl验证证书链可以用以下命令:debian:/home/zhaoya/openssl#openssl verify -CAfile ROOT_CERT USER_CERT其中的ROOT_CERT可以包含很多证书,可以用cat命令将多级的ca证书合并到一个文件里面,然后程序启动以后会加载ROOT_CERT,ROOT_CERT会在内存中形成一个堆栈结构,各个证书的顺序和文件里面的

2010-04-01 21:16:00 12212 2

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除