Network/Storage/Linux Kernel

我失业了
私信 关注
Mrpre
码龄12年

Linux Kernel、Network

  • 756,858
    被访问量
  • 136
    原创文章
  • 9,043
    作者排名
  • 523
    粉丝数量
  • 毕业院校 Galidun
  • 目前就职 Galidun
  • 于 2008-09-13 加入CSDN
获得成就
  • 博客专家认证
  • 获得216次点赞
  • 内容获得265次评论
  • 获得562次收藏
荣誉勋章
TA的专栏
  • SSL/TLS协议详解
    38篇
  • redis
    6篇
  • golang
    1篇
  • llvm
    4篇
  • 公钥密码学
    6篇
  • Liunx 与 C
    10篇
  • 网络协议
    10篇
  • mips
  • Liunx内核
    24篇
  • 信息安全
    11篇
  • ECC
    3篇
  • 椭圆曲线
    1篇
  • 密码学
    11篇
  • TLS
    42篇
  • TLS;漏洞
  • 漏洞
    1篇
  • rfc
    2篇
  • linux库函数源码分析
    4篇
  • nginx
    9篇
  • HTTP2
    2篇
  • openssl
    1篇
  • Iot
    3篇
  • Socket源码分析
    5篇
  • Socket选项
    3篇
公告
捐赠: http://39.98.242.44/ mrpre@163.com
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

TUN 设备原理

TUN 设备原理本文要解决的就是 sslvpn 的运行机制。例如如何使用tun设备,是的连个独立的私网ip能够跨公网访问simpletun首先玩一下简单的例子 https://github.com/gregnietsky/simpletun.git 然后有个直观的感受我们找2台机器 分别使用make命令编译上述代码,生成 二进制 simpletunA物理ip 11.238.116.73B物理ip 11.238.116.75在B机器上执行sudo ./simpletun -i tun90 -
原创
60阅读
0评论
0点赞
发布博客于 1 月前

Redis cluster 原理

Redis cluster 原理Redis cluster 设计文档可见:https://redis.io/topics/cluster-spec#configuration-handling-propagation-and-failovers相关资料https://chanjarster.github.io/post/redis-cluster-config-propagation/在当前Redis6.0的版本中,可以使用 redis-cli --cluster create命令来规划一个集群,
原创
66阅读
0评论
1点赞
发布博客于 3 月前

redis 模块编程中 key value的生命周期

RedisModule_OpenKey本节探讨下 RedisModule_OpenKey 中 key-value 何时释放。首先 的数据结构如下struct RedisModuleKey { .... robj *key; robj *value; ....}我们关心的是 RedisModuleKey 本身以及 其中 的 key和value值的生命周期RedisModuleKey 本身 通过 RedisModule_OpenKey申请,模块内存管理自动将
原创
99阅读
0评论
0点赞
发布博客于 7 月前

Golang 对分片 append 是否会共享数据

Golang 对分片 append 是否会共享数据Golang 官方对 slice 的说明见文章:https://blog.golang.org/slices-intro 大部分特别是前半部分,写的非常详细,但是最后关于append相关部分,就让人感觉浅尝辄止了。首先,先写结论:append 返回的slice对象,有可能会共享入参slice的底层(意味着对返回对象slice的赋值会影响入参slice)也可能不共享入参slice的底层。先给几个例子例1:package mainimport (
原创
86阅读
0评论
0点赞
发布博客于 7 月前

Redis源码分析之PSYNC同步

Redis master-slave 同步源码分析(1)slave 流程分析(2)master 流程分析Slave 分析当Redis 启动后,会每隔 1s 调用 replicationCron (通过 redis自带的serverCron后台线程),即无论是单机、还是Master、还是Slave都会调用这个函数。我们先来讨论下作为Slave的情况下,replicationCron 函数运行逻辑。作为slave,这个函数的功能应该能猜到,就是和Master保持连接、握手、接受Master存量数据+
原创
136阅读
0评论
0点赞
发布博客于 7 月前

LLVM - 生成局部变量

接上面一篇:https://wonderful.blog.csdn.net/article/details/106902005上面一篇实现了如下函数,但是 都是对入参a的操作 double myfor(double a) { for(i = 0; i < a; i++) { a = a + 1 } return a }本例中,我们希望实现是局部变量的加减,然后return,如下 double myvar(double a) { do
原创
244阅读
0评论
0点赞
发布博客于 8 月前

LLVM - 生成for循环

1、生成函数2、使用Phi表达式实现for循环3、本例中,KaleidoscopeJIT源码位于./llvm-8.0.1.src/examples/Kaleidoscope/include/KaleidoscopeJIT.hPhi的概念可参考https://stackoverflow.com/questions/11485531/what-exactly-phi-instruction-does-and-how-to-use-it-in-llvm本例中,生成的llvm ir如下:define do
原创
206阅读
0评论
0点赞
发布博客于 8 月前

LLVM - 生成 if-else 以及 PH

1、生成函数2、函数有4个basic block,一个entry,一个 if-then 另一个 if-else,最后一个是因为需要使用ph,所以创建一个merge。3、创建ph来处理if-else,相关概念 http://en.wikipedia.org/wiki/Static_single_assignment_form4、使用jit运行5、本例中KaleidoscopeJIT源码在./llvm-8.0.1.src/examples/Kaleidoscope/include/Kaleidoscop
原创
83阅读
0评论
0点赞
发布博客于 8 月前

LLVM - 生成加法

本例中KaleidoscopeJIT在 ./llvm-8.0.1.src/examples/Kaleidoscope/include/KaleidoscopeJIT.中1、LLVM生成函数2、LVVM生成加法3、LLVM jit运行#include <sys/time.h>#include "./llvm-8.0.1.src/examples/Kaleidoscope/include/KaleidoscopeJIT.h"#include "llvm/ADT/APFloat.h"#i
原创
140阅读
0评论
0点赞
发布博客于 8 月前

Redis源码分析之HSET流程与ziplist

本篇分析Redis 如何处理hset指令数据结构首先,hset不同于set,set是存储在dict,即redis字典里面,毕竟set只是简单的kv类型数据。 hset存储的是复杂的数据结构,使用了压缩表ziplist,例如hset mykey name abc id 123其中 mykey 为 key,abc为field,123为 value 。首先,需要说明的是,如果想了解ziplist内存的布局,完全可以看ziplist.c 文件开头的那些注释,这个是非常官方的解释,也非常详细。名为myk
原创
165阅读
0评论
0点赞
发布博客于 8 月前

kprobe 的 3 种使用

知识背景:会编写基础内核模块kprobe用处:用来跟踪、记录、打桩。最常见的使用就是需要打印内核函数的执行流程,比如排查问题时、或者学习内核流程时需要用到。准备工作:找一份和自己linux系统相同版本的源码(方法自行Google,ubuntu、centos、redhat各自有各自方法)内核模块跟踪指定函数官方文档:https://www.kernel.org/doc/Documentation/kprobes.txt在 内核源码目录samples/kprobes/有几个kprobe模块例子,.
原创
197阅读
0评论
2点赞
发布博客于 8 月前

通过splice完成socket代理零拷贝

spilce 的应用通常,一个反向代理服务器,需要做转发处理,例如流量模型如下:client -> proxy -> server客户端和 proxy建立socket,然后proxy和server建立socket下面这个程序逻辑非常简单,从fd获取数据,将数据转发到fd2。为了让 fd对应的socket有待读数据,这里访问了1.1.1.1,它是我启动的server。#define _GNU_SOURCE#include <unistd.h>#include <
原创
184阅读
0评论
0点赞
发布博客于 8 月前

Redis源码分析之SET流程

本篇分析Redis 如何处理set指令Client客户端解析用户输入、构造指令redisFormatSdsCommandArgv()redisAppendCommandArgv()cliSendCommand()issueCommandRepeat()repl()例如用户输入 set abcd 2,则构造的指令就是*3\r
$3\r
set\r
$4\r
abcd\r
$1\r
2\r
,*后面表示指令+参数的个数,$后面表示当前参数的长度,然后紧跟参数值。Server服
原创
90阅读
0评论
0点赞
发布博客于 8 月前

Redis源码分析之SDS

Redis源码分析之SDSredis使用的sds源码,由另一个git库管理,独立于redis之外,可以独立看待:https://github.com/antirez/sds ,其好处,再其主页上说的很清楚了,本文是用来分析sds的内存结构,知道内存结构,也就能很好的理解sds的一些操作的原理。sds被用来描述Redis中的“字符串”,也是redis中最为简单的数据结构之一。本文就来分析 sds...
原创
111阅读
0评论
0点赞
发布博客于 8 月前

Nginx 的子请求(subrequest)原理分析

Nginx 的子请求(subrequest)原理分析Nginx 的子请求设计其依托于自身的access阶段,实现了对指定url发起旁路请求的功能,通常用来鉴权、镜像等功能。当然还有其他用法这里不一一赘述,通常用户使用的接口有如内置auth_request接口或者lua的capture接口。这两个对外的接口,都使用了Nginx的ngx_http_subrequest函数。本文就稍微梳理下其子请求流...
原创
565阅读
0评论
0点赞
发布博客于 1 年前

进程间文件描述符传递原理

进程间文件描述符传递原理进程中文件的管理以及fork每个进程的文件描述符是独立的,即一个进程打开的文件描述符是记录在进程对象上的(task_struct)。task_struct { files_struct *files;}files_struct { struct fdtable __rcu *fdt;}fdtable { struct file _...
原创
890阅读
0评论
0点赞
发布博客于 2 年前

raw socket 使用 BPF 过滤报文

raw socket 使用 BPF 过滤报文抓包使用 raw socket 进行网络底层抓包,想必大家都清楚(仔细想想tcpdump原理)。这里不赘述,网上许多资料。注意,网卡需要开启混杂模式、其次程序需要管理员权限。#include <stdlib.h>#include <stdio.h>#include <sys/socket.h>#inclu...
原创
1568阅读
0评论
1点赞
发布博客于 2 年前

tcp_tw_reuse对客户端的作用

tcp_tw_reuse对客户端的作用客户端频繁建立连接然后主动关闭连接,会产生大量TIME_WAIT,此时,如何快速利用TIME_WAIT呢?必须满足下面所有条件:客户端:/proc/sys/net/ipv4/tcp_tw_reuse 为 1/proc/sys/net/ipv4/tcp_timestamps 为 1 TIME_WAIT socket 生存时间超过1秒服务端:...
原创
1593阅读
0评论
0点赞
发布博客于 2 年前

Nginx 作为反向代理(proxy)时的一些buffer指令

Nginx 作为反向代理(ptoxy)时的一些buffer指令Nginx处理请求的行为Nginx 只要配置的proxy_pass 都会无条件执行 ngx_http_read_client_request_body尝试去读 client 的 body。请求不携带body常见于 GET/HEAD方法。此时,在ngx_http_read_client_request_body判断Content...
原创
2132阅读
0评论
0点赞
发布博客于 2 年前

MQTT v5 (MQTT 5.0) 新特性介绍

MQTT v5 (MQTT 5.0) 的新功能项目中逐步完成了 MQTT 5.0的开发,这里介绍下MQTT 5.0 的一些新特性MQTT 5.0 规范见:http://docs.oasis-open.org/mqtt/mqtt/v5.0/cos01/mqtt-v5.0-cos01.html#_Toc514847900格式首先,协议上,增加了一个 Property字段,正是这个字段,使得 M...
原创
7805阅读
5评论
3点赞
发布博客于 2 年前

Nginx 假性内存泄露

Nginx 假性内存泄露Nginx在使用中,发现其使用的VSZ和RSS都在不断变大,查看新增的代码,没有找到内存泄露的地方,ngx_palloc和ngx_pfree都是对称调用的。Nginx 内存池机制使用Nginx开发过的都知道,在Nginx里面普遍使用ngx_palloc/ngx_pnalloc申请内存,其中入参有一个pool,它是从ngx_create_pool获得的一个对象,改函数入...
原创
1724阅读
3评论
3点赞
发布博客于 3 年前

隐藏动态库so中的符号(函数名)

隐藏动态库so中的符号(函数名)正常的lib库生成1.cint func1(){ return 1;}2.cextern int func1(void);int func2(){ return func1();}编译成动态库 libfunc.so:gcc -shared -fPIC -o libfunc.so 1.c 2.c查看符号:$nm libf...
原创
6242阅读
0评论
0点赞
发布博客于 3 年前

通过代码获取Linux nameserver(域名服务器ip)

通过代码获取Linux 域名服务器ip/etc/resolv.conf首先,/etc/resolv.conf定义了机器的域名服务器ip,例如nameserver 1.1.1.1nameserver 2.2.2.2表示DNS服务器地址有2个。当然,你可以人肉解析改配置文件,这个是没问题的,如果你代码没有BUG的话。glibc 对配置文件的处理#ifdef _LIBC if (M...
原创
2562阅读
0评论
0点赞
发布博客于 3 年前

调用malloc时发生了什么(3) - 缺页中断

页表的创建kmalloc内存使用了umapped内存,直接对地址偏移即可寻址物理内存,这里不考虑。考虑用户态内存和vmalloc,都用到了虚拟内存,即需要通过页表查询的方式查询都物理内存。例如 用户态通过brk申请了一块内存,后续访问这块内存的0x00007F88F16A4690这块地址会发生什么?首先,X64内核是4级页表,根据X64对线性地址的划分,可以计算出0x00007F88F16...
原创
843阅读
0评论
0点赞
发布博客于 3 年前

大页内存 初始化

大页内存 初始化hstates所有的大页均放在 hstates 的全局变量中。mm/hugetlb.cstruct hstate hstates[HUGE_MAX_HSTATE];每个 hstates 数组的元素,均表示一种大小的page,其中 HUGE_MAX_HSTATE的值为2,这也就解释了为什么hugepage目前只支持2个pagesize。当前系统有多少个类型 的hugepa...
原创
717阅读
0评论
0点赞
发布博客于 3 年前

Linux 大页内存 的使用

Hugepage 大页内存 的使用系统启用大页内存下述操作,需要重启机器。不建议 通过 设置 echo 1G &amp;amp;amp;gt; /proc/sys/vm/nr_hugepages的方式设置,因为系统不一定成功。设置大页内存的PAGESIZECentos 下(其他发行版本自行Google)grubby --update-kernel=ALL --args=&amp;amp;quot;hugepagesz=1G defau...
原创
4116阅读
0评论
2点赞
发布博客于 3 年前

perf 统计缺页中断 和TLB miss

perf 统计 内存相关eventperf 可探测 的所有 event ,均可以使用命令perf list获得。本文举几个和内存相关的性能的几个event例子探测 进程 的缺页中断数(page fault)perf stat -e faults ./mem能够统计 ./mem 执行 周期内,引发的 缺页中断数。Performance counter stats for './mem':...
原创
2347阅读
0评论
0点赞
发布博客于 3 年前

socket源码分析之accept

socket源码分析之accept()基于 kernel 3.10 之前有分析过TCP accept()的实现,但是太过于沉浸于代码本身,没有结合应用去分析accept()函数。 我们要解决如下几个问题: 1:accept()函数的实现,包括从全队列中取出sock。 2:accept()函数如何如何被唤醒 3:accept()函数如何解决惊群 4:多个进程accept(),...
原创
1796阅读
0评论
1点赞
发布博客于 3 年前

TCP选项分析 之 SO_REUSEADDR

TCP选项分析 之 SO_REUSEADDR首先 从工程角度考虑如下问题问题: 1:Server 进行 bind(),listen(),accept(),然后进行等待Client连接。 2:Client 进行 连接。即,Server的accept()返回client_fd 3:Server 程序退出(异常退出,或者)。但是和客户端的连接依旧存在。 4:Server 重启程序,但...
原创
430阅读
0评论
0点赞
发布博客于 3 年前

MQTT协议 几个重要的属性

MQTT 特性MQTT协议其实还是挺简单的,从为数不多的项目中,简单的总结了下MQTT协议某些字段的特性 1:will(遗言)包括 Will topic 、will message 、 will Qos、will retain。 一个Client异常断开连接的时候或者Server处理失败的时候,Server会把Client的will信息,当做Publish处理,Publish的to...
原创
4670阅读
0评论
3点赞
发布博客于 3 年前

MQTT 3.1.1 规范

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html2 MQTT Control Packet format1.2 Structure of an MQTT Control PacketMQTT协议靠交换不用的控制帧来工作,这节描述了这些帧的格式。 一个MQTT控制帧总是有3部分组成,如图2.1 ...
翻译
814阅读
0评论
0点赞
发布博客于 3 年前

TLS 1.3 协议详解

TLS 1.3 握手流程详解需要的背景知识: (1):对 TLS 1.2 协议有一定程度的了解,包括秘钥交换、会话复用等。第一节 TLS 1.3 的握手概述协议分析的第一步就是看报文。TLS 1.3的报文,有个特点,就是通过抓包发现,只能看到明文的Client Hello和Server Hello,其余的握手报文均被加密。1-RTT如图: 图1 条件:无条...
原创
19888阅读
18评论
11点赞
发布博客于 3 年前

签名算法中rsa_pss_pss_*和rsa_pss_rsae_*的区别

rsa_pss_pss_* 和 rsa_pss_rsae_* 的区别对于签名来说首先,对于签名来说,没区别。都是使用PSS流程进行签名。对于公钥来说有区别说先,加签方需要判断自己的 public key 什么类型,如果 public key是rsaEncryption类型,则用rsa_pss_rsae_表示对应私钥的签名算法OID; 如果自己的public key是 id...
原创
1264阅读
0评论
0点赞
发布博客于 3 年前

SSL_write 发生了什么

SSL_write 发生了什么以前在设计协议栈的时候,非常随意,因为包括下层的TCP到上层的应用处理,都是自己设计的,怎么样不麻烦这么约定。然而,如果将自己的协议栈放在通用平台,那么问题就显得比较微妙了,不是因为协议栈本身自己的实现的难度,而是使用协议栈的方式多样化导致接口设计需要变得非常复杂。一个简单的SSL_write流程,其实核心内容很简单: 1:分段(如果必要的话) 2:每段算...
原创
5894阅读
0评论
0点赞
发布博客于 3 年前

Nginx源码分析之 HTTP阶段

typedef enum { /*最开始的阶段,貌似Nginx原生没有该阶段的handler*/ NGX_HTTP_POST_READ_PHASE = 0, /*配置在server块的rewrite指令,则会处理hander,否则,handler进去直接return*/ NGX_HTTP_SERVER_REWRITE_PHASE, /*根据URI进行lo...
原创
348阅读
0评论
0点赞
发布博客于 3 年前

Nginx源码分析之 配置结构1

个人认为,Nginx的配置结构复杂至极,比Nginx其他模块的都复杂,想要彻底搞清楚,还需要下功夫。下面是个人的一些理解。if (cmd-&amp;amp;amp;gt;type &amp;amp;amp;amp; NGX_DIRECT_CONF) { /*&amp;amp;quot;daemon&amp;amp;quot; &amp;amp;quot;worker_processes&amp;amp;quot;等指令为NGX_DIRECT_CON
原创
182阅读
0评论
0点赞
发布博客于 3 年前

流式校验UTF8格式

由于某个工程需要校验数据是否是utf8格式的,然后翻了翻RFC,确实挺简单的编码格式,所以直接写了,但是越写越感觉不对,字节不够时真的需要cache吗?想肯定还有非常简单的方法,果不其然,找到了这篇paper: http://bjoern.hoehrmann.de/utf-8/decoder/dfa/流式校验 utf8 源码:static unsigned char TYPES[] = ...
原创
325阅读
0评论
0点赞
发布博客于 3 年前

编写wireshark lua插件 解析私有协议

wireshark 解析私有协议1:本文很多写法并不合理,因为我不知道wireshark框架,也从来没写过lua。。纯属瞎捉摸出的结果。 2:文本以解析websocket协议为例。准备lua文件我的wireshark安装目录在:C:\Program Files (x86)\Wireshark\ ,所以我在plugins\2.6目录下,创建了一个websocket.lua文件。lu...
原创
2812阅读
3评论
1点赞
发布博客于 3 年前

Nginx源码分析之 HTTP2

Nginx 分析之 HTTP2首先,Nginx作为WEB服务器或者作为proxy,其基本的处理逻辑就是根据不同的Header、Method进行业务处理,无论前端协议是HTTP2还是HTTP 1.x,反正都是HTTP,所以Nginx业务处理中理论上并不关心前端是什么协议,而Nginx最开始支持的是HTTP1.x,所以当HTTP2协议过来时,它必然会先解析HTTP2,然后转换成Nginx现有流程中...
原创
2513阅读
3评论
0点赞
发布博客于 3 年前

HTTP2 之 HPACK 头部压缩

HTTP2 HPACK 头部压缩传统HTTP的 Header“GET / HTTP/1.1\r
Host: www.mrpre.com\r
\r
”。显然,如果不关心Body,HTTP是一个纯使用ASCII进行交互的协议。缺点1:Method 表达方式冗余:例如 HTTP 的 method 有 GET 、POST等不下数十种方法,每次请求都需要用多个不等长度的字符来表示...
原创
2066阅读
1评论
0点赞
发布博客于 3 年前

Nginx源码分析之 upstream指令

Nginx 源码分析 upstream指令想要的解决问题:1:upstream存储结构 2:动态 upstream 流程(proxy_pass跟随变量或者域名)最简单的配置文件http { upstrem abc { server 1.1.1.1; server 2.2.2.2; } upstrem efg { ...
原创
1024阅读
0评论
1点赞
发布博客于 3 年前

Epoll 的水平模式、边缘模式 与 Nginx

读水平模式只要socket缓冲区有数据,且执行了EPOLL_CTL_ADD监听socket,内核就一直通知进程;即,只要内核通知了进程,但是进程没有read或者没有read完数据,就会触发唤醒进程。边缘模式socket有数据,会通知进程,不管进程有没有read,后续不再通知,除非 有新的数据到来 或者 再次调用 EPOLL_CTL_MOD 后,才会被唤醒。 但是一种情况例外,...
原创
1583阅读
9评论
0点赞
发布博客于 3 年前

Nginx源码分析之 长短连接

Nginx分析之长短连接:Nginx作为proxy,其长短连接有2部分,一部分是client一部分是server。downstream 和 upstream 未开keepalive先梳理一下http_proxy的流程 1:downstream 如果 location 配置了 proxy_pass,则会ngx_http_core_content_phase函数中调用ngx_http_p...
原创
1021阅读
0评论
0点赞
发布博客于 3 年前

TLS协议中PRF和TLS1.3中的HKDF

TLS 协议中 PRF 和 TLS 1.3 中的 HKDFTLS 1.0/1.1/1.2协议中,使用了PRF算法进行 key derive。 TLS 1.3中使用了标准的HKDF来进行key derive。这里大概先回顾一下 &amp;amp;lt;= TLS 1.2 时密钥导出流程和PRF算法使用场景。 然后再说一下 TLS 1.3 中的HKDF 算法 流程。PRF算法:PRF算法可以生...
原创
3941阅读
3评论
4点赞
发布博客于 3 年前

HKDF实现

HKDF详细请见文章 https://blog.csdn.net/mrpre/article/details/79879392 本文给了一种python实现和三种C实现。python程序(摘自wiki): #!/usr/bin/env python3 import hashlib import hmac from math import ceil...
原创
2703阅读
6评论
0点赞
发布博客于 3 年前

RFC5869翻译 HMAC-based Extract-and-Expand Key Derivation Function (HKDF)

HMAC-based Extract-and-Expand Key Derivation Function (HKDF)Abstract改文档描述了一个简单的基于HMAC的密钥导出方法,它可以用来在不同的协议和应用中构建早不同的block。 KDF被设计用来满足不同的应用和需求,并且被用来当做hash函数。Status of This Memo略Copyright...
翻译
2014阅读
0评论
0点赞
发布博客于 3 年前

RSA的PSCK1 和 PSS 加密、签名封装以及填充方式和实例程序

RSA的PSCK1 和 PSS 加密、签名封装以及填充方式SSA = Signature Scheme with Appendix PSS = Probabilistic Signature Scheme ES = Encryption Schemes SSA是填充、封装格式 PSS是私钥签名流程。 ES 是公钥加密流程。https://tools.ietf.org/html/...
原创
6302阅读
1评论
6点赞
发布博客于 3 年前

RSA中的中国剩余定理(CRT)和多素数(multi-prime)

RSA的中国剩余定理(CRT)和多素数(multi-prime)写了个代码,方便计算大数运算: git@github.com:mrpre/bn_tool.git 本片中的运算都可以使用这个工具进行计算。传统方式计算RSA公钥私钥RSA公钥私钥生成 两个大素数p,q,计算n = p*q 计算phi(n),因为p,q是素数,所以phi(n) = (p-1)*(q-1) 随机取...
原创
6322阅读
1评论
6点赞
发布博客于 3 年前

PSK在TLS中的应用

PSK在TLS中的应用之前搞TLS的过程中,PSK的概念有所了解,但是一直觉得他没什么用处,就大致看了一下实现,没深究。但是TLS1.3中居然设计到了PSK的概念,我想有必要在这里总结一下,以免忘记。RFC 4279中详细描述了各个方面。PSK的三种类型PSK-only简单的说,就是client写死一个key,server写死一个key,当然这两个key是一样的。 这个key...
原创
4820阅读
7评论
2点赞
发布博客于 3 年前

各种加密模式在TLS协议中的运用 3 (AEAD:GCM模式)

GCM,不知道该如何说起,因为涉及到群论、有限域等,先写个大概,有机会再补。域就是我们常见的一个集合,集合中的元素可以进行加减乘除,除了0以外的元素都有逆元。 例如实数域,R = (….,-1, 0, 1, 2, 3, 4 ….)就是一个域,他是无限大小的。 对于任意R中的x1 x2,加减乘的结果还在R中。0是加法单位元,1是乘法单位元。 不严谨的说,域就是一个集合。 好,过。...
原创
6426阅读
3评论
3点赞
发布博客于 3 年前

各种加密模式在TLS协议中的运用 2 (AEAD:CCM模式)

AEAD 模式名词解释AE:Authenticated encryption AD:Associated-Data本篇背景知识CBC、各种加密模式在TLS协议中的运用 1、CTR模式与Mac-then-Encrypt不同,AEAD是整个算法流程,同时保证了数据的私密性和完整性。回想MtE和EtM模式, mac和和cipher都是分别计算的;CCMCCM其实是E...
原创
5723阅读
1评论
2点赞
发布博客于 3 年前

各种加密模式在TLS协议中的运用 1 (Mac-then-Encrypt)

Mac-then-Encrypt老的算法譬如:TLS_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_RC4_128_MD5 都是mac-then-encrypt模式。加密流程图:上面涉及到2个操作(算上padding计算的话是3个操作)HMAC操作1:计算HMAC,这个HMAC操作就是“MAC-then-encrypt”中的M...
原创
3008阅读
2评论
2点赞
发布博客于 3 年前

调用malloc时发生了什么(2) - sys_brk函数与VMA

调用malloc时发生了什么(2) - sys_brk函数在上一篇中我们讲过,malloc实际调用了brk函数完成堆的分配,也了解了进程的内存布局。现在我们来看看,进程的内存布局到底是怎么实现的。具体如何堆指针增加减少的。增加减少,堆进程的影响是什么?一系列的问题等着我们去解决。sys_brk函数(去掉了与本篇无关的代码)SYSCALL_DEFINE1(brk, unsigned
原创
668阅读
2评论
0点赞
发布博客于 3 年前

调用malloc时发生了什么(1) - brk与sbrk

调用malloc时发生了什么这或许是老生常谈的问题,也是面试中经常碰到的问题,有人简单的几句话就回答完了,有人却能大谈特谈。疑问进程的堆栈结构malloc是否会占用内存malloc对应的系统调用malloc返回的地址free函数干了什么一般,我们在需要申请内存的时候,需要执行malloc(),分配内存,需要注意的是,malloc()是glibc函数,其实际对应的系统
原创
3413阅读
0评论
2点赞
发布博客于 3 年前

Encrypt-then-Mac

Encrypt-then-Mac本文约定如下: M:明文数据 E:加密函数 H:hash函数 MAC:MAC函数 C:密文标准密码学中,对 认证+加密 算法,有如下四种处理方式: 1:Hash-then-Encrypt 2:Mac-then-Encrypt 3:Encrypt-then-Mac 4:Encrypt-and-Mac1:Hash-then-Encrypt,
原创
1602阅读
1评论
1点赞
发布博客于 4 年前

pipe函数内核实现

pipe源码分析本文基于linux kernel 4.13 分析,与通用的2.6差距较大。请读者自行甄别本文的特性,是否符合自己当前环境。本文要解决的问题1:pipe源码分析2:pipe大小限制3:如果没有读(写)端了,那么我写(读)操作会发生什么。父子进程之间通信,首先想到的是pipe函数,pipe函数返回2个fd。通常
原创
3371阅读
0评论
0点赞
发布博客于 4 年前

OCSP RFC 翻译 (RFC 2560 RFC 6960)

RFC翻译
翻译
1556阅读
0评论
0点赞
发布博客于 4 年前

setcontext getcontext makecontext swapcontext

Linux上下文切换以及协程 上下文切换,听起来虚无缥缈,什么是上下文,切换又是指的是什么?其实上下文就可以理解为一个进程所运行的相关的寄存器值,即包括sp/bp/pc等值,换句话说,一个上下文,就是包括了能够恢复进程运行所需要的所有必要的东西。所谓的切换, 那是多进程的操作系统必要的功能,一个CPU能够运行多个进程(看起来),那么必然要在多个进程之间不停的切换,A切换到B时,必...
原创
2171阅读
1评论
1点赞
发布博客于 4 年前

OpenSSL 开启 TLS1.3

TLS 1.3协议详解:https://blog.csdn.net/mrpre/article/details/81532469 1:github下载 对于的代码 https://github.com/openssl/openssl2:./config enable-tls1_3 &amp; make &amp; sudo make install 1:若发现 install ...
原创
7293阅读
0评论
0点赞
发布博客于 4 年前

HTTPS优化之动态调整 TLS record size

Dynamic TLS Record Size背景知识1:TCP 分段网络报文对的格式一般都是 mac header + ip header + tcp header + tcp payload由于端对端的网络之间存在不同的链路环境,一个报文传输过程中,经过不同的网络设备,不同的网络设备的MTU不通,即允许传输 ip层数据(算上ip头)不超过MTU大小的报文,如果ip层...
原创
1599阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解 (31)TLS1.1 TLS1.2 在CBC模式下两种不同的加解密方式及优化思考

SSL优化
原创
5967阅读
2评论
1点赞
发布博客于 4 年前

TCP三次握手时客户端ACK捎带数据

今天碰到一个奇葩的问题,一直跑的好好的程序,碰到某个服务器就不行了。当前流程:client serverSYN -------------------><------------------------SYN ACKdata with ack bit------> 客户端发送data后服务器一...
原创
1427阅读
0评论
0点赞
发布博客于 4 年前

linux内核路由模块fib_valid_source函数(反向路由检测)

表示对linu内核查路由的的效率表示堪忧。一个经过linux的报文,无论是上送本机,还是转发,都会进行大于等于2次的查路由动作。即执行大于等于2次的fib_lookup。外部包过来,ip_rcv->ip_rcv_finish->ip_route_input->ip_route_input_slowip_route_input_slow判断报文是否转发,还是上送本机即ip_forward
原创
1640阅读
0评论
0点赞
发布博客于 4 年前

netlink实现用户态和内核态数据交互

本文代码实现:用户进程发送“nihao”给内核,内核回复“niyehao”给用户态。1:netlink.h添加自己的宏。2:编写用户态程序。3:编写内核态程序。内核态,需要全局变量进行数据的交互。在模块init的时候,可以:netlinkfd = netlink_kernel_create(&init_vrf, NL_MY, 0, kernel_rece
原创
1000阅读
0评论
0点赞
发布博客于 4 年前

OpenSSL心血漏洞分析

SSL 是一种理论,而其具体实现,就有好多了,firefox有自己的实现,旧版本的chrome有自己的实现,Openssl也属于实现的一种。     该漏洞并不是协议上的漏洞,而是针对某个实现的漏洞,说简单点就是:代码写的烂或者考虑不全面。 受影响的OpenSSL版本:OpenSSL 1.0.2-betaOpenSSL 1.0.1 - OpenSSL 1.0.1f 
原创
2313阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别

我的TLS实现:https://github.com/mrpre/atls/大家可以参考,代码里面的逻辑较清晰。 我的SSL专栏见:https://blog.csdn.net/mrpre/article/category/9270159描述了TLS的各方面。 本文是对前面系列章节关于非对称算法在SSL中运用的总结和细化,但也可以作为详解SSL中RSA、ECDHE非对...
原创
43710阅读
28评论
29点赞
发布博客于 4 年前

TLS/SSL 协议详解 (29) 国密SSL协议

测试服务器:https://47.89.249.43:4433/(测试时,先将本机时间设置为2018年7月之前(我证书过期了),然后使用360国密浏览器访问。360国密浏览器会在TLS握手失败后才会发起GMSSL握手,所以访问较慢。出现访问不了的情况,请清除360国密浏览器所有缓存,重启浏览器后再访问)源码在https://github.com/mrpre/atls上可以获得...
原创
19785阅读
18评论
3点赞
发布博客于 4 年前

TLS/SSL 协议详解 (28) TLS 1.0、TLS 1.1、TLS 1.2之间的区别

TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txtTLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txtTLS 1.2 RFC http://www.ietf.org/rfc/rfc5246.txtTLS 1.3 见:https://blog.csdn.net/mrpre/article/deta...
原创
118837阅读
2评论
10点赞
发布博客于 4 年前

TLS/SSL 协议详解 (27) SSL 随机数的作用

      SSL随机数分为client random、server random,分别由客户端和服务器生成然后通过client hello和server hello发送给对方。这里不讲其他的随机数包括client key exchange的随机数,ECC签名时的随机数等。            在协议实现上,SSL随机数充当了重要的角色,在各重要阶段被使用。 (1)生成maste...
原创
6077阅读
4评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解 (26) https访问告警问题总结

本文所述的前提是服务器发过来的是受信证书,若是其本身不受信证书,例如自建证书,那浏览器告警就正常。常见问题1:ie不告警、但是火狐告警;安卓不告警但是ios告警原因(1):一般时由于使用了“便宜”的证书导致,例如证书链如下root->ca1->ca2->user服务器只发送了ca2+user,如果客户端只有root证书,就会告警,如果客户端有root+ca1,则不会告警
原创
989阅读
0评论
1点赞
发布博客于 4 年前

TLS/SSL 协议详解 (25) https双向认证及常见问题总结

预备知识https://blog.csdn.net/mrpre/article/details/77867063http://blog.csdn.net/mrpre/article/details/77866856http://blog.csdn.net/mrpre/article/details/77868263http://blog.csdn.net/mrpre/article...
原创
8351阅读
23评论
1点赞
发布博客于 4 年前

TLS/SSL 协议详解 (24) CFCA蛋疼的事

你永远无法想象中国的证书机构管理证书如此随意,颁发证书如此毫无章法,我举个真实例子:CFCA 颁发过这么恶心的证书链1:他们首先生成2个根证书root1.cer,root2.cer两个根证书,即两个根证书subject不同,一个叫root1另一个叫root2。2:然后生成一个ca.key,用ca.key生成ca1和ca2,分别
原创
2503阅读
1评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解 (23) HTTPS实际应用碰到的问题

在实际使用中,也衍生出了许多新的技术以及规范,用来更好的支持SSL。1:OCSP2:证书透明度3:HSTS/Preload List4:CSP
原创
1142阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解 (22)TLS1.3

详细分析见:https://blog.csdn.net/mrpre/article/details/81532469。大致说一下改变 1:椭圆曲线选择有变化,剔除了RSA加密算法。2:为了减少rtt,在client hello前,中根据所有服务器可能使用的椭圆曲线算法,计算出一系列pubkey,添加在client hello的拓展中。3:服务器收到client hello 之后...
原创
2485阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解 (22)会话复用

  由于SSL握手的非对称运算无论是RSA还是ECDHE,都会消耗性能,故为了提高性能,对于之前已经进行过握手的SSL连接,尽可能减少握手round time trip以及运算。 SSL提供2中不同的会话复用机制。1:session id会话复用  对于已经建立的SSL会话,使用session id为key(session id来自第一次请求的server hello中的sessi...
原创
10484阅读
8评论
6点赞
发布博客于 4 年前

TLS/SSL 协议详解(21)证书的选择

证书的选择由于存在多域名对应一个ip的情况,所以通常Server会使用SNI来选择证书,只要上线过SSL,就会碰到这个问题。例如,你拥有2个域名,一个是 a.com 和 b.com,你要支持怎么办?方法1:a.com 映射成 1.1.1.1b.com 映射成 2.2.2.2即,两个域名使用不同ip,这样server 就建立2个不同服务,即服务器需要监听2个端口。  方法...
原创
1407阅读
3评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解 (20)加密套件的选择

当一个SSL请求发送到服务器,由于SSL的client hello中有自己支持的所有加密套件,服务器需要选择。服务器在选择算法时,会有优先级,是以客户端提供的的为最优,还是服务器端配置的为最优。所谓的客户端最优,就是根据客户端提供的加密套件,从上到下,看是否有本地支持的,有的话则使用。所谓服务器端最优,就是服务器端根据自身配置的加密套件顺序,一个个在client hello中找,找到了...
原创
15214阅读
19评论
1点赞
发布博客于 4 年前

TLS/SSL 协议详解 (19) Encrypted handshake message

目的:这个报文的目的就是告诉对端自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。其次,这个报文作用就是确认秘钥的正确性。因为Encrypted handshake message是使用对称秘钥进行加密的第一个报文,如果这个报文加解密校验成功,那么就说明对称秘钥是正确的。原理:首先,无论是客户端还是服务端,都会在握手完成之后,发送Encrypted ...
原创
6714阅读
5评论
1点赞
发布博客于 4 年前

TLS/SSL 协议详解(18) Change cipher

这是一个无关紧要的数据。在TLS1.3中就被废弃了(可以发送、也可以不发送)。需要注意的是,该数据本身不被计算握手摘要,因为它的type不是Handshake。发送改报文表示自己后续的发送数据会被新秘钥加密,所以一般开源代码的处理流程,是在读到该数据时,去计算(derive) read侧的密钥(即解密密钥、解密hmac密钥,解密IV),然后调用read函数时就自然而然的进行解密了。...
原创
1608阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解(17) Certificate verify

发送这个类型的握手需要2个前提条件(1):服务器端请求了客户端证书(2):客户端发送了非0证书     此时,客户端想要证明自己拥有该证书,必然需要私钥签名一段数据发给服务器验证。签名的数据是客户端发送certificate verify前,所有收到和发送的握手信息(不包括5字节的record)。其实这个流程和签名server key exchange基本一样。计算摘要,然后签
原创
2074阅读
0评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解 (16) client key exchange

ECDH/ECDHE下client key exchange如下所示比较简单了,和server key exchange处理一样,客户端随机生成一个大数,然后乘上base point,得到的结果就是public key。04表示uncompression,后面是x和yRSA下,client key exchange如下所示客户
原创
5845阅读
4评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解(15) client certificate

如果服务器端请求了客户端的证书,客户端即使没有证书,也需要发送该类型的握手报文,只是这种情况下,里面的内容为0。如果浏览器有对应的证书,则会发送证书,当然,也有可能发送上级证书(即发送证书链),这个完全取决于浏览器。特别说明一点,我亲眼见过IE带了一个错误的上级证书发送到服务器,这个简直亮瞎了我。
原创
2679阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解(14) server hello done

没什么有用信息。
原创
2293阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解(13) certificate request

双向认证时,服务器会发送certificate request,表明自己想要收到客户端的证书。  这个类型的握手主要包含了ca证书的subject,用以告诉客户端自己需要哪些证书,不是由这些ca签发的证书“我”不要。  客户端,例如浏览器在收到这个请求时,如果不存在对应的证书,则发送一个空的certificate至服务器,如果存在一个证书,则发送该certificate至服务器。如果存在多
原创
3150阅读
0评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解(12) server key exchange

对于使用DHE/ECDHE非对称密钥协商算法的SSL握手,将发送该类型握手。这是ECDHE下,server key exchangeECDHE下主要有几点重要的信息1:指明自己使用的椭圆曲线(一般根据客户端的拓展中supported_groups中的选择椭圆曲线算法)。2:公钥。服务器本地计算一个大数(BIGNUM),乘上曲线的base point,得到
原创
11197阅读
10评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解(11) Server Certificate

发送服务器证书,这个不再赘述。将服务器配置的证书(链)发送到客户端。注意证书链的顺序,最下层证书在前(用户证书在前,上级证书在后)。有个技巧,在wireshark右键“导出分组字节流”功能,然后保存证书,是可以变成一个正常证书的(二进制格式)。
原创
3052阅读
0评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解(10) server hello

Server hello 相对Client hello来说简单的多,Server hello中的内容主要是对Client hello的响应。主要包含几点重要的信息1:随机数(用来生成主密钥和kdf)2:session id(sessionid会话复用需要带上,当然命中session ticket时也需要带上)3:使用的加密套件(根据客户端提供的算法列表、服务器证书类
原创
4172阅读
6评论
1点赞
发布博客于 4 年前

TLS/SSL 协议详解 (9) Client hello

  SSL报文格式可以大致分为2部分,Record层 和 Handshake层,Record层中指定了后续数据的类型,SSL版本(一般来说固定),以及后续数据的长度。Handshake层欧威Record层的负载,其关系类似TCP层的数据作为IP层的负载。例如上图中显示的那样,SSL报文头部是TVL格式:  Content Type: Handshake  Version: TLS 1.0  Len...
原创
18664阅读
1评论
10点赞
发布博客于 4 年前

TLS/SSL 协议详解 (8) 协议简介

我们大致了解了SSL的流程,以及运用了哪些手段达到了哪些目的。但是前面的描述毕竟不太完善,但这并不妨碍我们了解SSL。  本节,我们将详细介绍SSL协议,结合报文,我们将学习到比第四章的更多的知识。  首先我们通过抓包,分析一下报文的特点。我看可以看出,SSL是建立在TCP之上的应用层协议,现在看起来报文有点乱,我们剔除TCP之后再看看:
原创
2318阅读
0评论
3点赞
发布博客于 4 年前

TLS/SSL 协议详解 (7) SSL 数字证书的一些细节2

  证书格式   编码格式证书编码格式多种,但是不要根据文件后缀名(der,cer)等区分证书格式。总的来说,证书分为2种,一种是二进制的、一种是进行base64编码的证书。前者使用notepad或者任意文本编辑器打开,显示乱码,后者则显示正常的base64编码后的数据。下图为经过base64编码后的证书,由BEGAIN和END包括。(老司机可能就发现了,有点像长了...
原创
2136阅读
3评论
0点赞
发布博客于 4 年前

TLS/SSL 协议详解(6) SSL 数字证书的一些细节1 证书验证

证书关系到了SSL的众多安全性,比如身份认证,密钥交换。所以有必要单拉出一章来讲证书。本章完善一下前几节中的身份认证的一些缺点。首先,通过前面讲解,我们知道,证书需要几个重要的字段。例如“拥有者”、“颁发者”、“截止日期”。另外,生成证书的时候会自动生成一份“公钥”以及对应的“私钥”。现在假设我开了一个网站,准备用SSL加密的,需要让全世界信任我这个网站,那么我就需要一个证书,这时候...
原创
4134阅读
6评论
5点赞
发布博客于 4 年前

TLS/SSL 协议详解 (5) 运用密码学原理构建安全信道3

保证数据的完整性   到目前为止,我们后续的报文可以加密通信了。现在只要保证,后续加密的数据不被篡改就行了,或者说,SSL需要辨别数据是否被篡改的能力。  这时候摘要就派上用场了。回顾第三章中,我们提到的摘要的特性:    1:不同的数据,即使是一字节改变,其摘要的结果变化非常大。    2:无论摘要的输入长度是多少,其输出是固定长度,对于MD5而言输出16字节,对于SHA1而...
原创
2115阅读
0评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解 (4) 运用密码学原理构建安全信道2

密钥的协商、交换 上一节中,我们已经能保证客户端的确是和可信的服务器进行交互了,在保证服务器可信的基础上,接下去,我们要让客户端和服务器之间共享一个密钥,该密钥用来加密后续的会话。密钥协商和交换是SSL的一个关键,也是SSL性能消耗大的地方,而需要消耗如此高性能的直接原因就是,客户端和服务器希望安全的交换或者协商出一个密钥。那么客户端和服务器之间怎么安全的共享一个密钥而又不让其他人...
原创
2352阅读
0评论
2点赞
发布博客于 4 年前

TLS/SSL 协议详解(3) 运用密码学原理构建安全信道1

  上一节的知识很大程度上是数学意义上的知识,本章将讲解如何使用这些数学意义上的东西,使其体现出实际应用的价值。本章将站在设计者的角度,考虑如何构建一条安全的信道。 身份认证 首先,之前建行网银的例子告诉我们,要进行安全的加密通信,前提是自己的确和自己想要的对端进行通信,而不是别人,为了和可信的对端进行通信,我们需要一定的手段进行或者说研究出一定的手段,进行身份认证。在这里我们就用...
原创
3701阅读
0评论
6点赞
发布博客于 4 年前

TLS/SSL 协议详解 (2) SSL有关的密码学原理

对称加(解)密加密和解密使用同样的密钥。举个例子就知道了。假设现在有一段明文:0010 1101 1110 0101以及一个密钥:0111我们定义加密方式是“异或”,4 bit一加密。 那么 0010 1101 1110 0101 最终将会加密成 0101 1010 1001 0010。如果我们想要解密,那么只需要将0101 1010 1001 0010与 ...
原创
3198阅读
2评论
3点赞
发布博客于 4 年前

TLS/SSL 协议详解(1) 前言

概念  首先,需要清楚SSL是什么。  很多人把SSL和 HTTPS混为一谈,认为SSL就是HTTPS,其实不尽然。SSL全称是“Secure Socket Layer”,字面上可以从“Secure”单词可以看出,SSL是负责“安全”传输的,并不关心传输的内容是什么。而HTTPS只是SSL应用的一种,即用SSL加密HTTP内容(普遍采用443端口),SSL还可以加密Email(995、46...
原创
4007阅读
0评论
4点赞
发布博客于 4 年前

换工作

    近4 年的slb的开发,从L4到L7,从HTTP到FTP,从TCP到SSL,也算是元老了。什么线上问题没碰到过,什么高强度熬夜没碰到过,到现在处理问题得心应手了。反倒是越来越绝的负载均衡(CDN)比较简单了,这像是围城,外面的人想进来,里面的人想出去。    其实越来越觉得,传统设备厂商与互联网厂商之间的越来越有交集。网络设备的客户无非 银行/运营商/行业,这些客户所有流量加起来,估计没有...
原创
728阅读
0评论
0点赞
发布博客于 4 年前

Bootmem

Bootmem是系统启动时的内存管理器,当伙伴系统初始化后,bootmem就会被free,存在时间较短,但是在伙伴系统初始化之前的内核其他初始化, 均需要依赖于bootmem,且了解bootmem能够帮助理解伙伴系统。 Bootmem使用位图来表示哪些页框被使用吗,例如系统是100兆内存,bootmem需要管理这100兆内存,一个页大小为1k,,总共102400个页(100m/1k),
原创
415阅读
0评论
0点赞
发布博客于 4 年前

ECDH and ECDSA(ECC椭圆曲线算法3)

这是ECC系列的第三篇。在之前的文章中,我们看到了什么是椭圆曲线,并且我们为了做一些数学运算,定义了椭圆曲线上的点为一个群,然后我们约束了曲线的取值范围(即定义在有限域上的群)。有了这个约束,我们也看到了椭圆曲线上的点能够生成循环子群。我们也介绍了基点、解、cofactor的概念。最后,我们看到了在有限域上的数乘运算是一个简单的操作,但是离散对数问题是比较难的。现在我们来看看ECC算法的应用。椭圆曲
翻译
23726阅读
3评论
7点赞
发布博客于 4 年前

有限域和离散对数问题(ECC椭圆曲线算法2)

有限域和离散对数问题这篇文章是ECC系列的第二篇在上一篇文章中,我们看到了基于实数域的的椭圆曲线如何构成了群(Group),我们如下定义了群中的加法:P + Q + R = 0,我们分别用几何方法和代数方法计算了了椭圆曲线点的加法。 随后,我们有介绍了数乘(nP = P + P + P + … + P),然后找到了一个较为快速的计算nP的算法:double and add。现在,我们要限制我们的椭
翻译
15356阅读
3评论
8点赞
发布博客于 4 年前