项目实践(五)API安全

HMAC验签(带密钥的Hash摘要算法)

虽然简单的哈希计算可以有效防止令牌失窃,但不能防止写访问权限的攻击者插入伪造令牌。大多数的数据库在设计上并没有考虑提供恒定时间比较措施。可以通过计算消息验证码(Message Authentication Code,MAC)来解决这两个问题,如标准的基于哈希的MAC(HMAC)。HMAC的工作方式类似于普通的加密哈希函数,但它包含一个只有API服务器知道的密钥。

密钥共享

HMAC-SHA256使用的密钥只是一个32字节的随机值,因此可以使用SecureRandom类来生成一个密钥,类似数据库令牌ID的生成方式。但是很多API要使用多个服务器来实现,这样才能处理众多客户端生成的大量请求,并且来自同一客户端的请求可能被路由到不同的服务器上,因此它们都需要使用相同的密钥。否则,在一台服务器上生成的令牌会被另一台服务器认为是无效的,因为密钥不同。即便是只使用一台服务器,如果曾重启过,那么重启之前发出的请求也会被拒绝,除非密钥没有变。因此,可以将密钥存储在一个外部密钥库中,所有的服务器都可以加载。

HMAC和JWT

1:HMAC(AK/SK) 是一种认证方式,相较于传统的传输账户密码,它避免了密码的传输,并且因为有加密,时间等因素存在。避免了数据串改,重放攻击等问题。AK其实就是用户名,用来标识调用API者的身份。SK是秘钥,用来加密,通过对比加密结果,来判断SK是否对的上。
2:JWT是凭证的一种,相较于简单的TOKEN,可以理解其是一种复杂的TOKEN,TOKEN本身通过解密可以获取用户信息。比如 用户张三,29岁。我编码后是 ASDASDASDA,这个TOKEN解密后能还原张三,29岁这样的信息。

在实际应用中,比如我们去调用腾讯的接口,我们先要通过AK/SK完成认证,也就是告诉腾讯,我们是XXX!如果腾讯在数据库里找到了你的信息,你就认证通过了。这个时候我们可以访问一些公共的资源,或者属于开发者的资源!
但是如果你要访问腾讯其他用户的资料,则需要获取用户的授权。比如老王要授权你去读取它QQ空间的照片。这里通过OAUTH2.0完成授权获取token。 这个TOKEN就是你获取授权的一个凭证,你可以拿来读取老王的照片!
认证解决的是身份辨识的问题,知道谁在调用接口!
授权解决的是权限的问题,知道你能调哪些接口。(对于默认开放的借口,也可以不要授权)
token是凭证,JWT又是生成token的一种具体方法。

HMAC主要应用在身份认证中,使用方法如下:(随机值作为密钥)
(1)客户端发出登录请求(假设是浏览器的GET请求)。
(2)服务器返回一个随机值,并在会话中记录这个随机值。
(3)客户端将该随机值作为密钥,对用户密码进行HMAC运算,然后提交给服务器。
(4)服务器读取用户数据库中的用户密码和(2)中发送的随机值,做与客户端一样的HMAC运算,然后与用户发送的结果比较,如果结果一致,就验证用户合法。
在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的HMAC结果,而对于截获了这两个值的黑客而言,这两个值是没有意义的,绝无获取用户密码的可能性。随机值的引入,使HMAC只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了HMAC算法,比如PHP的mhash、Python的hmac.py、Java的MessageDigest类,在Web验证中使用HMAC也是可行的,用JS进行md5运算的速度也是比较快的。

我们可以描述HMAC算法的运算步骤:
(1)检查密钥K的长度。如果K的长度大于B,则先使用摘要算法计算出一个长度为L的新密钥。如果K的长度小于B,则在后面追加0使其长度达到B。
(2)将上一步生成的B字长的密钥字符串与ipad做异或运算。
(3)将需要处理的数据流text填充至步骤(2)的结果字符串中。
(4)使用哈希函数H计算上一步中生成的数据流的信息摘要值。
(5)将步骤(1)生成的B字长密钥字符串与opad做异或运算。
(6)将步骤(4)得到的结果填充到步骤(5)的结果之后。
(7)使用哈希函数H计算上一步中生成的数据流的信息摘要值,输出结果就是最终的HMAC值。由上述描述过程我们知道HMAC算法的计算过程实际是对原文做了两次类似于加盐处理的哈希过程。在应用中,出于安全的考虑和数据的保密,需要使用加密算法,有时为了让加密的结果更加扑朔迷离,常常会给被加密的数据加点“盐”。说白了,盐就是一串数字,完全是自己定义的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容