SSL证书与私钥的编码格式和文件扩展名

...

2023-04-09 · 3 min · 621 words

X.509 certificates

 X.509是定义的一个公钥证书格式标准。 RFC 5280 详细描述公钥证书,包括它们的字段和扩展名。 ...

2023-03-09 · 1 min · 191 words

单元测试

单元测试 单元测试的目的并不是查找bug,而是帮助我们更好的设计我们的代码,如何合理的来拆分我们的代码。 单元测试vs集成测试 集成测试检查各个组件间协作运行是否正常,单元测试检查应用程序中的一个某一个小的功能模块。 相关工具 以python为例 unittest nose or nose2 pytest 其中,nose和nose2基于unittest, 如果使用python2可以使用前两中,pytest要求python3.7+。pytest有较多插件, 显示内容更为丰富一些。 用官方例子比较一下: # content of test_sample.py def inc(x): return x + 1 def test_answer(): assert inc(3) == 5 直接运行pytest [garlic@centos8 pytest]$ pytest ========================================= test session starts ========================================= platform linux -- Python 3.6.8, pytest-7.0.1, pluggy-1.0.0 rootdir: /home/garlic/pytest/pytest collected 1 item test_sample.py F [100%] ============================================== FAILURES =============================================== _____________________________________________ test_answer _____________________________________________ def test_answer(): > assert inc(3) == 5 E assert 4 == 5 E + where 4 = inc(3) test_sample.py:7: AssertionError ======================================= short test summary info ======================================= FAILED test_sample.py::test_answer - assert 4 == 5 ========================================== 1 failed in 0.03s ========================================== [garlic@centos8 pytest]$ cat test_sample.py # content of test_sample.py def inc(x): return x + 1 def test_answer(): assert inc(3) == 5 如果用unittest要写成下面的样子: ...

2022-05-08 · 2 min · 375 words

ISO8583协议

背景介绍 在银行卡支付领域,经常提到“8583”, 他是金融机构中银行卡交易使用的一种内部协议。使用场景主要是终端如POS, ATM等金融终端到银行收单系统, 以及银行卡系统间。协议出现时期, 网络主要还是PSTN网络,电话拨号方式接入方式。考虑到带宽限制以及交易实时性要求,所以结构设计很紧凑,报文长度是1K左右,一般不会大于2K, 涉及数字的域还会采用BCD编码,从而减少报文长度。当然后续由于芯片卡应用,报文长度也有所增加。 银行卡的一些事 国际上最早的通用信用卡产生于20世纪50年代,1949年9月一天,纽约金融金融家麦克纳马拉与其好友布卢明代尔,在一家高档餐馆就餐,结账时发现现金不够,只好请其妻子来付款。这件事情给了麦克纳马拉重要启示,他和布卢明代尔一起策划了餐馆赊账网络, 发行一种可以记账的卡片,这就是大莱卡的开端。 受大莱卡的启发, 美国市场上出现了各种旅游娱乐卡, 美国运通公司凭借其遍布全球的旅行俱乐部及旅行者服务,后来居上最终成为旅游娱乐卡的领先者。 1951年,富兰克林银行在纽约长岛开始发行其首张信用卡,银行的主要收入来源是向零售商收取的5-7%的商户扣率, 持卡人无须支付任何直接费用。 1958年,美洲银行发行一种蓝、白、金三色组成,并带有飞鸽图案的银行卡,1976年,美洲银行卡公司更名为维萨(VISA)。 1966年, 一批银行家汇聚在美国的水牛城,召开了具有历史意义的第一次会议。并联合建立“同业银行卡协会”, 1979年银行卡协会更名为万事达卡国际组织,商标“MasterCard”。 1961年,日本信用卡株式会社(JCB)发行行用卡, 1981年开展国际业务。 2002年3月26日, 由国内80多家金融机构共同发起涉及的股份金融机构—中国银联成立。 注册资金16.5亿元人民币,总部设立在上海。 第一张人民币信用卡 1985年,中国银行珠海分行发行中国第一张人民币信用卡。 ISO 8583报文中包含信息 ISO8583报文格式 ISO 8583银行卡交换报文规范,目前的三个版本: IS08583:1987 IS08583:1993 IS08583:2003 3 个版本之间没有大的区别,主要字段长度和数据元素的变化 ISO 8583 做为通用标准被采用,同时存在一些保留字段可用于存放自定义字段。 ISO8583报文格式 各个域包含卡片信息,商户信息,交易信息 每个域都有自己的含义和语法 各个字段格式包括:数字、字母数字、固定或者可变长 ISO8583报文样例 一笔银行卡消费为例:MTI 0100 + 第三域的 000000 初步判断为一笔银行卡授权交易,一般是信用卡消费,当让根据这两个域的有多种组合,可以代表多种交易。 01 00 30 20 05 00 20 C0 10 1C 00 00 00 00 00 00 00 99 80 00 00 01 00 21 00 03 37 62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 00 31 32 33 34 35 36 37 38 30 34 33 20 20 20 20 20 20 20 20 20 20 20 20 c5 8e b2 00 18 03 1e 9a 00 06 30 30 30 30 30 31 00 06 30 30 30 30 30 30 00 06 30 30 30 30 30 31 01 00 报文类型标识符 格式:n4 内容:0100 位图:根据位图按照每个域指定的格式进行解析即可 ...

2022-03-19 · 2 min · 265 words

ACME 证书自动化管理

在搭建blog使用https服务,需要申请配置一个域名证书,使用了Let’s Encrypt申请了免费的https证书。 HTTP vs HTTPS HTTPS 将 HTTP over TCP/IP 变成 HTTP over SSL/TLS,也就是在原有层之间增加一个SSL/TLS安全层。 SSL vs TLS from https://dev.to/techschoolguru/a-complete-overview-of-ssl-tls-and-its-cryptographic-system-36pd SSL最初由网景(Netscape)开发,于1995年首次发布2.0版本, 1.0版本由于严重安全漏洞未发布过 1996年,发布SSL3.0版本 三年以后的1999年,TLS1.0有IETF定义再RFC2246标准中诞生,他是基于SSL3.0的,所有些文章也称他为SSL3.1。 2006年,升级到TLS1.1,但是紧接着在2008年就被TLS1.2取代。 2018年,TLS1.3做出了巨大改进。 SSL2.0和SSL3.0分别在2011,2015年被弃用,截至2020年3月Microsoft,Apple,Google,Mozilla,Cloudflare和Cisco, 均已弃用TLS1.0,TLS1.1。目前推荐使用协议是TLS1.2,TLS1.3 HTTPS如何工作 主要分为两个阶段: 阶段一 获得服务器证书(a Server Certificate) garlic要想给garlicspace.com申请证书, 首先生成CSR(a Certificate Signing Request),主要包含了 证书使用的算法 密钥对长度 私钥 与此同时生成自己的私钥留存本地 garlic找到一个证书颁发机构(CA Certificate Authority), 比如:Comodo、GeoTrust、Thawte、RapidSSL。 CA会判断对garlic是否其域名garlicspace.com有控制权。 图片来源https://devconfcz2021.sched.com/event/gmMh/acme-certificate-management-has-never-been-easier 阶段二 有了SSL/TLS协议的支持HTTPS是如何工作的呢? 以TLS1.2为例子: 客户端发送ClientHello 发送随机数,客户端TLS版本号,密码套件,扩展列表 服务端收到后返回ServerHello服务端随机数, 确定TLS版本, 密码套件,同时返回服务器证书, 密钥交换算法参数。 客户端收到证书后验证其有效性,比如证书有效期,证书对应域名,通过本地已经安装CA根证书对证书验签,如果存在中间CA,进行证书链的验证。 客户端发送密钥交换参数, 之后改用协商好密码套件中的会话密钥加密(对称密钥)传输。 图片来源: https://certs.securetrust.com/support/support-how-ssl-works.php Let’s Encrypt做了什么 简单来说他自动化的完成,证书申请,验证,下载,自动化更新, 并且可以免费使用。目前ACME v2协议已经被成为IETF标准 ...

2021-08-28 · 2 min · 251 words

DeFi

DeFi:Decentralized finance 是一种基于block-chain的金融形式。他不依赖于券商,银行,交易所等中心话的机构。 说到区块链就让人想到Bitcoin, 当初第一次听到这个介绍还是是在infoQ大会上,恒生的一位架构师分享的时候了解到的。当时还有点融的CTO做的分享。我都尝试了。。。这两年板砖, 努力还债。 虽然Bitcoin实现了去中心化资金的转移,但是对于如今贷款,储蓄,保险,股票,丰富的金融服务大多是CeFi:Centralized financial 集中化的,于是Defi出现了。 什么是Defi? DeFi去中心化的金融服务, 主要包括啊以下几个部分: 基础架构:这里指的是可进行编程,运行去中心化服务的基础架构。 Ethereum实现了这点,你可以自己动手编写自己Dapp, Ethereum上面运行的代码也称智能合约。 稳定币:由于Ethereum本身高度波动性,需要有资产和我们现实世界的价值挂钩, 比如美元。常用的稳定币:去中心化:DAI,中心化: USDT, USDC or PAX 金融服务:有了去中心化稳定资产,就需要一个去中心化的交易所。比如Dex,Compound等,最近比较火的有Uniswap。一般提供以下服务: 借贷 Lending and Borrowing;赚取利息 兑换 Decentralized Exchanges; 衍生品 Derviatives;可以对标美元,黄金,其他数字资产等。 保证金交易Margin Trading; 保险 Insurance; 预言机Oracles, 将外部可靠数据传送到智能合约。 “乐高模式” 在统一个基础架构下,比如以太坊环境下,可以使用不同的钱包, 选择不同的Dapp提供给参与者一系列交易转账,借贷,保险等金融服务。 DEFI vs CEFI 图片来自 https://finematics.com/defi-explained/ 风险 涉及的几个潜在风险: 智能合约的BUG:天下程序员都会犯的错误。 伪中心化:是否有admin的角色存在。 价格波动:当然这正是他吸引人的地方。 网络拥堵和高昂的费用:目前以太坊正通过Ethereum2.0和second layer进行解决。 代币的发行:引起币价大幅度波动 最后 板砖的日子里远离了币圈有一段时间,当年出于好奇用2个eth,在 cryptokitties 买了几只猫,我看他们现在活得都挺好, 我试了试他的配种和拍卖的功能,没有成功。 而Defi应用能方便的给参与者带来收益,这使得更多的人参与进来。 当年跟着大军进入了币圈,P2P,“财富自由”应该是当时最火的词,回过头想想,对于投机行为,要控制好度,最好是在承受损失范围内,或者稍微超出一点;另外就是趁着年轻的时候,这样还有试错的机会。 参考及引用 Photo by Ralph W. lambrecht from Pexels https://finematics.com/defi-explained/ https://99bitcoins.com/what-is-defi/

2021-05-12 · 1 min · 70 words

视频的版权识别与管理

昨天正在听一位老师的英语的直播课, 当时她正在用影片的片段讲解英文听力课,讲到一半的时候,直播中断了。 显示“​stream suspended for policy violations” 后来查了下资料才知道, 平台通过Connent ID系统的运作方式来识别和管理上传的视频和音频版权。 千亿美金的YouTube:收购后的13年里 Google做了什么?这篇文章比较详细的介绍了Google收购YouTube后, 对其版权管理和内容变现盈利模式做的一些工作。 Youtube的成功离不开 Google 长远的眼光,而“ Google的生态数据、广告销售体系和Google Cloud的支持,也放大了YouTube的商业价值。” Content ID系统 Google收购Youtube后为解决其版权问题,建立一个能识别版权内容的Content ID系统。 版权所有者可以向YouTube上传自己的音频或视频文件,Content ID数据库根据这些文件来创建内容“指纹”。 如果发现有翻拍或模仿的内容,平台会给版权所有者三个选择: 禁播:禁止用户观看整个视频 获利:通过在视频中投放广告来利用视频获利;有时可以与上传者分享收益 跟踪:跟踪视频的观看情况统计信息 官网的一个视频介绍 实现思路及相关知识点整理 关于Content ID系统闭源实现, 目前没找到相关资料, 个人理解应该涉及三个方面。 视频识别 处理流程 服务整合 视频识别 视频识别主要涉及计算机视觉技术**(Computer Vision, CV),**涉及计算机视觉的基础模型,特征提取,近几年都受到深度学习的影响,出现了基于深度学习计算机视觉模型。 计算机视觉 概念 计算机视觉通过模仿人类的视觉系统,从照相机,摄影机等视频采集设备中获取原始信息,通过这些原始信息,进行语义(Semantic)解释或者逻辑理解。比如我们使用的电脑,我们需要识别显示器, 键盘,鼠标,并在头脑中形成这些物体的概念。 领域特点 **跨学科领域:**计算机视觉涉及多个领域 生物学领域:人眼及视觉神经系统,理解人脑的处理机制 物理学领域:设备越精密,越能完整的额捕获外界信息,主要涉及光学领域的研究。 计算机科学:信息检索,计算机体系结构,机器学习。 相关难题: 图像信息与语义之间巨大鸿沟。例如:如何将一个200*200RGB图像,对应12万数字组成的矩阵与具体的事物关联起来。 识别速度。实验表明,一副普通场景图片,人类需要150毫秒,人类在理解图片时,依靠过去的记忆、经验、外界知识来对图像中物体进行判断。这些都是计算机系统难以企及的。 **实现方式。**是模仿人类视觉系统还是需要开辟其他研究道路。 应用: 视频识别已经在人脸识别,光学字符识别,电影特效,视觉搜索,自动驾驶,无人商店,虚拟现实,增强现实等方面有了广泛应用。 基础模型及操作: 像素表达: 根据不同的图像类型像素表达也不同. 黑白图像:转化0或1的二元矩阵 灰度图像:每一个像素代表灰度的“强度”Intensity 范围在0-255 彩色图像:比较流行的RGB,三种颜色叠加,RGB代表三种不同的通道,每一个通道都是一个矩阵表达,每个像素代表0-255,彩色图像是一个**张量(Tensor),**也就是三个矩阵叠加一起的结果。 像素本身是真实世界中的“采样”,连续的信号采样到离散像素,难免会有失真的情况,不同分辨率会有不同程度的像素表达。 关键字 Pixel 过滤器: 移动平均(Moving Average) 这个过滤器的本质就是针对每个像素点对周围的9个像素点,计算其平均值,并形成心得矩阵。然后对新像素点视觉化。 ...

2021-03-24 · 1 min · 166 words

Linux跨文件系统的文件夹和文件映射关系

VFS(Virtual File System) Everything is a file 是Unix的设计理念,由其派生的Linux也如此。 Unix系统I/O模型最为显著的特征之一就是I/O通用性,也就是同一套系统调用open(), read(),write(),close()所执行的I/O操作,可以在所有文件类型上被执行。 文件系统有很多种实现。 Linux系统中通过VFS(Virtual File System),定义一系列通用接口。所有与文件交互程序都会按照接口进行操作。 每种文件系统都会提供VFS接口实现。 依赖倒置原则(DIP):高层的模块不依赖底层, 而依赖高层的抽象。 文件模型 主要由以下对象模型组成: Superblock object:存放文件系统信息。 inode object:存放具体文件一般信息, 文件控制信息,唯一标识一个文件。 file object:存放文件与进程间交互信息。 dentry object:存放dentry与文件相关信息,便于文件检索。 图片来在《Understanding The Linux Kernel》 可以看到在inode object和superblock object和实际的文件系统有直接关系的, 而file object和dentry object与文件系统是没有映射的,其中,dentry object起到了中间纽带的作用。 文件使用 每一个进程将打开的文件的描述符(file descriptor)保存在一个数组中, 当调用open()时,系统调用返回文件描述符,供后续read(),write()等使用, 这些系统调用获取file的数据结构后,通过VFS函数的调用,实现相关功能。 下图展示了相关数据结构之间的关系。 图片来自 https://myaut.github.io/dtrace-stap-book/kernel/fs.html 从上图可以看到, 进程通过task_struct中的files可以获得file object,包括文件打开方式f_mode,如O_RDONLY、O_RDWR, 文件偏移位置f_pos,如seek函数使用到, 文件相关的系统调用都可以通过file object对文件进行操作。 每一个文件可以通过inode object和dentry object进行标识, inode object包含一些文件本身的一些信息, 如权限信息,比如i_uid,i_gid, dentry object包含文件的目录结构信息,方便通过文件名进行查找。 虽然dentry和inode标识文件系统的文件, 但是系统在不同位置可以安装多个文件系统, 这个位置就是mountpoint, linux中通过vfsmount 结构的mnt_sb指向标识文件系统super_block, 通过mnt_root指向安装点, 就可以方便跨文件系统的文件管理。 文件映射 下面用调试工具看下跨文件系统映射关系 ...

2021-03-06 · 2 min · 403 words

开源许可证

最近在学习python 使用到在操作package的时候,有一个步骤就是要增加一个“LICENSE”文件。 Copyright (c) 2018 The Python Packaging Authority Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 这里用到是MIT的许可证。 ...

2021-02-21 · 3 min · 508 words

python语言学习

最新学习极客时间物联网课程中,老师使用的语言是python。之前也没有系统学习过,利用假期,跟着两个极客时间专栏学习了一下python 。 使用的MicroPython是精简的、高效的python3的实现, 更加适合嵌入式开发。 python语言是精简,即插即用的语言,有非常丰富的工具包,尤其是在机器学习和数据分析方面。 python开发工具 常用的开发工具 Pycharm Jupyter Visual studio Vim (python-mode) Spyder Atom python语法 接触过c,java, linux shell perl,其实就会发现python和这些语言语法基础上也都大同小异。 下面代码使用的是python3运行 变量 动态类型变量 我理解的动态右值的类型已经是确定的(一个固定的或者的范围内的值), 所以左值仅是他的一个提供被使用的标记。 >>> var1 = 1 >>> type(var1) <class 'int'> >>> var1 = 'hello world' >>> type(var1) <class 'str'> 类型 数字类型支持整数,浮点数, 复数。上面例子可以看到python3 中整数也使用了class int,这样实现使得其在语法上没有最大值限制的,可以支持到非常大的整数。 字符串 支持三种分割符号,最容易想到的就是在字符中可以包含单引号“’”或者双引号“"”, 'hello world' "hello world" '''hello world''' 字符串转义字符和其他语言类似也是用“\” 不能修改字符串某个字符 >>> var1='hello' >>> var1[2]='a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment 需要重新生成一个返回。字符串拼接可以使用“string.join(iterator)” 或者“+=” ...

2021-02-17 · 4 min · 754 words