互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
http://www.cnblogs.com/charlesblc/p/6341265.html 其中的一篇。
参考
https://zhuanlan.zhihu.com/p/20336461?refer=auxten
网络编程(四):互联网中TCP Socket服务器的实现过程需要考虑哪些安全问题?
在Internet环境下,安全问题我主要分为如下几类:
- 信息传输过程中被黑客窃取
- 服务器自身的安全
- 服务端数据的安全
首先,如果能用https,就尽量用https,能用nginx等常见服务器,就用常见服务器,主要能避免以下问题:
- 自己实现的协议&Server端可能会有各种Bug,被缓冲区溢出攻击等
- SSL加密体系在防监听方面已经足够成熟,值得信赖
如果需要自己实现Server端,实现一套合格的SSL还是很考验功底的:
- 首先要弄明白SSL加密体系密钥交换的原理
- 对各种对称、非对称加密算法要有深刻的理解
- 用非对称加密算法怎么实现一套密钥交换体系
- 如何处理ca证书,在自签名情况下怎么避免中间人攻击
工程实现过程中,要考虑:
- 各种可能的缓冲区溢出攻击
- SYN flood攻击,慢连接攻击
- DDoS防起来有难度,但至少能防御DoS攻击
业务逻辑层面,要考虑:
- 每个接口都要做好用户&权限验证
- 接口会不会被人乱用,重放攻击
- 攻击方会不会找到一个比较消耗服务端资源的接口,用很小的代价耗尽服务端资源
- 用户的用户名密码会不会被通过接口破解,参见:2014 celebrity photo hack
- 你的服务会不会被黑客利用去攻击别的服务,特别是会根据用户输入抓取什么资源的服务
- 古老的SQL注入
- 无耻的仿冒服务,DNS欺诈
- 涉及HTML的,还要考虑跨站……
即使你做到了天衣无缝,还要考虑队友有时会掉链子:
- glibc、openssl这些基础的库也会爆出漏洞,参见:Heartbleed
- 同一台主机上的其它服务被攻陷
写完之后整个人都不好了
关于加密解密算法参见:加解密(Encryption)& 哈希(Hash)算法----入门指引 - 面向工资编程 - 知乎专栏
一、Encryption算法和Hash算法的区别
- 信息论角度:
- Encryption是可逆的,没有信息熵的改变
- Hash是不可逆的,Hash一般会导致信息熵减小
- 应用角度:
- Encryption常被用来做基于密钥的数据加解密(AES、RSA、ECC)
- Hash主要被用来做数字签名、数据校验(CRC、SHA、MD5)
- 小白角度:
- Encryption就是带密码的保险箱
- Hash就是榨汁机,有去无回
二、加解密算法分为对称(Symmetric)、非对称(Asymmetry)两大类
- 对称(Symmetric)加密
- 对称加密的算法非常之多,一般使用中用AES就基本够用了。
非对称(Asymmetry)加密
- 非对称加密算法,就是加密、解密的密钥分为两组,并且互相不能反推。这种算法在现实中很难有什么事物可以类比。大致就是通过某种算法可以生成一个密钥对k1、k2,用k1加密之后的密文只能用k2解密,反之亦然。
非对称加密算法从原理上讲常用的有两种: - 基于因数分解的算法
- RSA、DSA是此类算法中的代表,Linux系统的SSH就是基于这两种算法进行文件key auth。前几年一般建议RSA至少要达到1024位密钥才能保证抵御暴力破解,但由于GPU和超级计算机的算力提升,现在密钥长度建议2048位了。
- 椭圆曲线算法(ECC)
- 非对称加密算法非常酷,但它有一个致命的缺点:慢。RSA加密的速度大致是AES的1/30左右。所以我们不可能在所有场合都采用这类加密算法。我们的程序猿前辈们就创造了SSL、TLS等加密体系:
三、加密体系
TLS的前身是SSL,HTTP + TLS = HTTPS
一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据[1]。通过握手,客户端和服务器协商各种参数用于建立安全连接:
1. 当客户端连接到支持TLS协议的服务器要求建立安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。
2. 服务器从该列表中决定加密和散列函数,并通知客户端。
3. 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。
4. 客户端确认其颁发的证书的有效性。
5. 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。
6. 利用随机数,双方生成用于加密和解密的对称密钥。
7. 这就是 TLS 协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS 握手过程就会失败,并且断开所有的连接。
五、盐的重要性
之前在这篇文章中提到过,如果单纯的把文件按块去加密,即使采用最强壮的算法也会存在一个很明显的漏洞,这里不再赘述,参见:用已知加密算法AES加密文本123,得到密文xxx,问能否根据密文、加密算法、原文本123直接推导出密钥是什么? - auxten 的回答
关于哈希函数的选用:
工作中发现,很多人对哈希函数的了解仅限于MD5。例如,在做数据库的分库分表的时候,可能需要对hostname做一次哈希再去取模,这里采用MD5就显得过于浪费CPU。要知道MD5平均会将每个Byte进行6.8次运算代入。
如果只是需要利用哈希的离散型,完全可以采用更轻的哈希算法
互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点的更多相关文章
- 基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程
基于多进程服务器的优点: 1.由操作系统进行调度,运行比较稳定强壮 2.能够方便地通过操作系统进行监控和管理 例如对每个进程的内存变化状况,甚至某个进程处理什么web请求进行监控.同时可以通过给进程发 ...
- 无法删除服务器 'old_server_name',因为该服务器用作复制过程中的发布服务器。 (Microsoft SQL Server,错误: 20582)
无法删除服务器 'old_server_name',因为该服务器用作复制过程中的发布服务器. (Microsoft SQL Server,错误: 20582) 2013-01-05 15:02 478 ...
- 网络装机pxe服务器的配置过程
网络装机pxe服务器的配置过程 背景: 针对于Linux运维工作中遇到的需要大批量安装Linux系统的情况,通过网络装机的方式实现无人值守安装Linux操作系统,现需要配置一台pxe服务器用于pxe批 ...
- 使用Navicat或者其他数据库工具连接阿里云EDS(数据库服务器)实例过程详解
使用Navicat或者其他数据库工具连接阿里云EDS(数据库服务器)实例过程详解 背景:这几天从阿里云上面购买了云服务器,最垃圾的那种,还送oss和EDS数据库服务器,只不过EDS数据库服务器只有一个 ...
- HTTPS握手-混合加解密过程
SSL协议通信过程 (1) 浏览器发送一个连接请求给服务器;服务器将自己的证书(包含服务器公钥S_PuKey).对称加密算法种类及其他相关信息返回客户端; (2) 客户端浏览器检查服务器传送到CA证书 ...
- RSA算法原理——(3)RSA加解密过程及公式论证
上期(RSA简介及基础数论知识)为大家介绍了:互质.欧拉函数.欧拉定理.模反元素 这四个数论的知识点,而这四个知识点是理解RSA加密算法的基石,忘了的同学可以快速的回顾一遍. 一.目前常见加密算法简介 ...
- (4.21)SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
转自:指尖流淌 http://www.cnblogs.com/zhijianliutang/p/4100103.html SQL Server数据库启动过程(用户数据库加载过程的疑难杂症) 前言 本篇 ...
- https加解密过程
前前后后,看了许多次关于https加解密过程的相关文档资料,一直似懂非懂.这次,终于理解了,还画了个图,做个记录. 知识点 1.对称加密:双方用同一个密码加解密.如des,aes 2.非对称加密:双方 ...
- RSA-演变过程、原理、特点(加解密及签名)及公钥私钥的生成
本篇是iOS逆向开发总结的第一篇文章,是关于iOS密码学的相关技术分析和总结,希望对大家有所帮助,如果有错误地方欢迎指正. 一.前言 密码学的历史追溯到2000年前,相传古罗马凯撒大帝为了防止敌方截获 ...
随机推荐
- PCB Genesis增加轮廓字 实现原理
在Genesis增加汉字自带是不支持增加汉字的,如果需增加汉字需用到CAD 汉字库才可增加汉字,这里介绍一种脱离汉字库实现 Genesis增加轮廓字(如要变为实体,填空Surface可变为实体字) 一 ...
- 8.20noip模拟题
2017-8-20 NOIP模拟赛 by coolyangzc 共3道题目,时间3.5小时 题目名 机器人 数列 虫洞 源文件 robot.cpp/c/pas seq.cpp/c/pas holes. ...
- bzoj 2152 聪聪可可(点分治模板)
2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 3194 Solved: 1647[Submit][Status][Discuss ...
- Python 41 完整查询语句 和 一堆关键字
一:完整查询语句 1.拷贝表 *** create table copy_table select *from customer ; 拷贝结构 与数据 create table copy_table ...
- 解决VS2008 开发Wince应用程序项目生成速度慢的问题
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
- Stick ------ 剪枝神题
这个是自己剪得 , 我感觉已经很不错了 但是不知道哪里出了问题 一直 超时 // 根据所给答案 和 题目要求 最直观的就可以有剪枝的地方 而且 剪枝剪得越早 就越省时省力 // 好的思路也可以省 ...
- BZOJ 3831 单调队列DP
思路: 这好像是我刚学单调性的时候做的题 (我是不会告诉你 我被这题教做人了的...) i-stk[head]>k 删队头 f[stk[tail]]>f[i]||(f[stk[tail]] ...
- C - Xenia and Ringroad
Problem description Xenia lives in a city that has n houses built along the main ringroad. The ringr ...
- 数据库 'tempdb' 的事务日志已满。若要查明无法重用日志中的空间的原因
最常的做法: --1.清空日志 DUMP TRANSACTION tempdb WITH NO_LOG --2.截断事务日志: BACKUP LOG tempdb WITH NO_LOG --3.收缩 ...
- 【Oracle】客户端监听配置
首先找到oracle软件安装的目录,找到\product\11.2.0\client_1\network\admin,打开tnsnames.ora文件: 粘贴一下内容: LISTENER= (DESC ...