设计自己的签名:什么是数字签名
设计自己的签名:什么是数字签名如果我们iOS安装App只有从AppStore下载一种方式的话,这样就可以搞定了,没有任何复杂的东西,只有一个数字签名,非常简单的解决问题。要实现这个需求很简单,最直接的方式,苹果官方生成一对公私钥,在iOS里内置一个公钥,私钥由苹果后台保存,我们传App上AppStore时,苹果后台用私钥对App数据进行签名,iOS系统下载这个App后,用公钥验证这个签名,若签名正确,这个App肯定由苹果后台认证的,并且没有被修改过,也就达到了苹果的需求:保证安装的每一个App都是经过苹果认证允许的。之所以要有第一步计算摘要,是因为非对称加密的原理限制可加密的内容不能太大(不能大于上述n的位数,也就是一般不能大于1024位/2048位),于是若要对任意大的数据签名,就需要改成对它的特征值签名,效果是一样的。好了,有了非对称加密和数字签名的基础之后,怎么样可以保证一份数据是经过某个地方认证的,来看看怎么样
现在知道了有非对称加密算法这东西,那么数字签名是怎么回事呢?
数字签名的作用是我对某一份数据打了个标记,表示我认可了这份数据(签了个名),然后我发送给其他人,其他人可以知道这份数据是经过我认证的,数据没有被篡改过。
有了上述非对称加密,就可以实现这个需求:
ios签名的目的与算法
- 首先用一种算法,算出原始数据的摘要,需要满足:
- a. 若原始数据有任何变化,计算出来的摘要值也要有变化。
- b. 摘要要够短,这里常用的算法是MD5。
- 生成一份非对称加密的公钥和私钥,私钥自己拿着,公钥发布出去。
- 对一份数据,算出摘要之后,用私钥加密这个摘要,得到一份加密后的数据,称为原始数据的签名。把它跟原始数据一起发送给用户。
- 用户收到数据和签名后,用公钥解密得到摘要,同时用户用同样的算法计算原始数据的摘要,比对这里计算出来的摘要和公钥解密签名得到的摘要是否相等,若相等则表示这份数据中途没有被篡改过,因为如果有篡改,摘要会变化。
之所以要有第一步计算摘要,是因为非对称加密的原理限制可加密的内容不能太大(不能大于上述n的位数,也就是一般不能大于1024位/2048位),于是若要对任意大的数据签名,就需要改成对它的特征值签名,效果是一样的。
好了,有了非对称加密和数字签名的基础之后,怎么样可以保证一份数据是经过某个地方认证的,来看看怎么样通过数字签名的机制来保证每一个安装到iOS的App都是经过苹果认证允许的。
最简单的签名
要实现这个需求很简单,最直接的方式,苹果官方生成一对公私钥,在iOS里内置一个公钥,私钥由苹果后台保存,我们传App上AppStore时,苹果后台用私钥对App数据进行签名,iOS系统下载这个App后,用公钥验证这个签名,若签名正确,这个App肯定由苹果后台认证的,并且没有被修改过,也就达到了苹果的需求:保证安装的每一个App都是经过苹果认证允许的。
如果我们iOS安装App只有从AppStore下载一种方式的话,这样就可以搞定了,没有任何复杂的东西,只有一个数字签名,非常简单的解决问题。
但是实际上,因为安装App除了从AppStore下载,我们还可以有三种方式安装一个App:
- 开发App时可以直接把开发中的应用安装进手机调试;
- In-House企业内部分发,可以直接安装企业证书签名后的App;
- AD-Hoc相当于企业分发的限制版,限制安装设备数量,较少用。
苹果要对用这三种方式安装的App进行控制,就有了新的需求,无法像上面这件简单了。
提供长期稳定不掉线、可带推送功能的ios企业签名服务,跳过漫长艰难审核过程,直接为用户提供高速下载安装服务: https://ds.fubi.hk/