我正在开发一个Android应用程序,但我想限制我的应用程序只能由没有运行root /自定义ROM的硬件访问.我知道Android的Forward Locking内容保护,但是想在我的应用程序中仔细检查这种保护.有没有办法获得设备的签名以及使用Android API的ROM的可信签名,以便我从自定义ROM锁定我的应用程序?
我已经有一对钥匙,公共和私人.我如何实际使用它java.security.Signature来验证我用其中一个键签名的字符串?
编辑:
我有两个键作为字符串.验证方法,实际上是
verify(byte[] signature)
Run Code Online (Sandbox Code Playgroud)
javadoc说:
verify(byte[] signature)指示是否可以使用公钥或签名者的证书验证给定签名.
在调用验证方法之前,如何使该签名识别用于验证的公钥/私钥?换句话说,如何将我的字符串键转换为可被签名接受的关键对象?
M2Crypto和OpenSSL CLI似乎没有创建相同的数字签名.这是我在Python中使用的代码:
import M2Crypto
rsa = M2Crypto.RSA.load_key("privkey.pem")
open("sig_m2crypto", "w").write(rsa.sign("md5-digest", "md5"))
Run Code Online (Sandbox Code Playgroud)
这是OpenSSL的命令行:
echo "md5-digest" | openssl rsautl -sign -inkey privkey.pem > sig_openssl
Run Code Online (Sandbox Code Playgroud)
在相同的输入,结果sig_m2crypto和sig_openssl总是不同的.重要的是我无法验证使用M2Crypto与OpenSSL生成的签名,反之亦然.
我的代码中是否有任何缺失使它们彼此不兼容?
附加信息:我在Windows 7下使用M2Crypto 0.21.1和OpenSSL 1.0.0.
什么构成网络表单(非文档)的"合法"数字签名?
方案1:我参与了一个医生记录患者健康状况的项目.提交Web表单时,将生成PDF并使用数字.CER证书进行数字签名,并将PDF保存到文件系统.每个医生都有自己的.CER文件和密码,这是一个真正的PITA维护,生成,存储和备份PDF的开销非常高.
还有像CoSign这样的第三方解决方案,允许用户在表单提交时向CoSign进行身份验证,如果经过适当的身份验证,则会以某种方式对表单进行数字签名.我相信所有这些解决方案都需要导出到各种类型的文档然后存储文档,并要求最终签名者拥有CoSign帐户.这不会起作用......
所有这些签名都要求将数据存储在对许多项目来说不理想的文档中.
选项2:我去了美国购物中心的微软商店并购买了一个新的Surface(稍后会退回:/),当他们退房时,他们给了我一个平板电脑(具有讽刺意味的是它不是Surface)和笔和我记下我的签名.另一个例子是Square应用程序,它还要求用户在某种触摸屏上记下他们的签名.我会假设签名存储在数据库中的某个图像中,但这是否构成"合法"文档?
我曾在一家小型医疗设备公司工作,该公司让医生在网上评估测试并以数字方式"签署"他们的评估,但所有这一切都是上传保存在数据库中的签名图像.
方案3:我看到这样做的另一种方式是在当天填写我的FAFSA以获得大学学费援助.他们会要求你查看条款,yada yada,然后在底部我必须输入我的完整法定名称"如上所示"并提交表格.他们在窗帘后面做了什么?
我正在研究的项目是一份简单的一页建筑公司合同,它解释了所有要提供的服务并需要签名和日期.此表单的电子版将收集Web表单中的所有必需数据并将其保存到数据存储中.
我最初的反应是提供一个基于<canvas>的HTML5元素,可以在iPad或其他东西上签名.是否需要将数据导出到文档中,然后使用数字签名进行签名,或者数据是否合法并在数据存储中"签名"?
我有一个原始的PDF文档和单独的文件作为PKCS#7签名数据.我想将这些组合起来创建签名的PDF文档,以便它可以在Adobe读者中显示它已签名并签署了该文档.
Java中是否有可用于以编程方式创建此类签名PDF文档的库?我需要加载该PDF并以某种方式添加签名,然后将其另存为新的PDF文档.
示例代码将不胜感激.
编辑:
生成的代码应将PDF文档作为输入参数并执行以下操作:
据我所知,第一步很重要,因为没有它,PKCS#7签名数据将是错误的.
我想对node.js中的文件执行RSA-SHA512。我可以计算给定数据文件的sha512哈希值,该哈希值与openssl的匹配。但是,当尝试在同一哈希上获取数字签名时,node.js签名与openssl签名不同。以下是示例代码片段:
var data = new Buffer(512);
data = fs.readFileSync('/tmp/data');
var pem = fs.readFileSync('/tmp/boot2-prvKey.pem');
var privateKey = pem.toString('ascii');
var signer = crypto.createSign("RSA-SHA256");
signer.update(data);
var sign = signer.sign(privateKey, 'hex');
console.log("SIGN " + sign + '\n');
Run Code Online (Sandbox Code Playgroud)
Openssl命令对数据进行签名:
openssl rsautl -sign -in /tmp/data -inkey /tmp/boot2-prvKey.pem -out sig
Run Code Online (Sandbox Code Playgroud)
以上两种都生成不同的签名。
我有两个问题:1)我想计算文件的RSA-SHA256,因此我首先计算整个文件的sha256哈希,然后将此哈希作为输入传递给签名函数。那是正确的方法吗?2)如果是,那么上面的代码可能出了什么问题?如果没有,正确的方法是什么?
我正在使用的node.js版本是0.10.36,openssl版本是1.0,1。
在EMV第2册:安全和密钥管理(第151页)中,有人说
"该计数器使密码(ARQC)具有唯一性,并为主机验证服务提供跟踪值,允许识别重放的交易和克隆卡."
如果发行人依赖ARQC的收单机构(终端发送会话UN的nonce)那么ATC的目的是什么?"允许重播交易"是什么意思?谁重播ARQC?
据我了解:要检查使用非对称公钥/私钥加密算法创建的JWT的有效性,您需要公钥以及JWT标头,声明(也称为有效负载)和签名.JWT标头和声明可以自由解码,但如果没有公钥来验证签名(基于标头和声明并使用私钥创建),则无法验证.
我的问题是,为什么不将公钥捆绑到令牌的声明有效载荷中.这样,任何人都可以检查令牌的有效性,而无需从数据库或文件存储中挖掘公钥?
如何使用x509证书签署json文档或字符串?
public static void fund()
{
string filePath = @"C:\Users\VIKAS\Desktop\Data.xml";
//Read the file
XmlDocument xmlDoc = new XmlDocument();
XElement ele = XElement.Load(filePath);
String Xml = ele.ToString();
xmlDoc.LoadXml(Xml);
string signature = SignedXMLCert(xmlDoc);
bool verified = ValidateSignature(signature);
}
public static string SignedXMLCert(XmlDocument xmlDoc)
{
string startupPath = AppDomain.CurrentDomain.BaseDirectory + @"Certificates\unidesk.p12";
// startupPath = AppDomain.CurrentDomain.BaseDirectory + @"\Certificates\BBPS_enc.cer";
//X509Certificate2 cert = new X509Certificate2(@"D:\Sonal\AXISOU_TEST.P12", "axisbank", X509KeyStorageFlags.Exportable);
X509Certificate2 cert = new X509Certificate2(startupPath, "axisbank", X509KeyStorageFlags.Exportable);
// string PrivateKey = GetRSAPrivateKeyBase64(cert);
var privateKey = cert.PrivateKey as RSACryptoServiceProvider;
SignedXml …Run Code Online (Sandbox Code Playgroud) 我一直在尝试解决问题,但是失败了无数次。我需要使用方法sign(),并且导入了正确的库,但是仍无法识别。
我正在用Python进行编码,这就是我认为重要的内容:
#importing the library
from Crypto.Signature import PKCS1_PSS
[...]
signer = PKCS1_PSS.new(keypair)
sig = PKCS1_PSS.sign(keypair)
Run Code Online (Sandbox Code Playgroud)
但是sign()方法是该库中整个代码中唯一无法识别的东西:
“这种检查可以检测到应该解析但不能解析的名称。由于动态调度和鸭子输入,在有限但有用的情况下,这是可能的。与实例项相比,对顶级和类级项的支持更好。”
有人对如何解决此问题有任何建议或知道我做错了什么吗?