就在几周前,谷歌改变了Android LVL API(许可证验证库).
在旧的LVL中,许可证检查基于使用基于每个帐户基础生成的公钥/私钥的许可证验证.新的假设每个应用程序库使用公钥/私钥.
我有使用旧LVL的应用程序,看起来它的工作原理(看起来像,但实际上我不知道).应用程序嵌入在每个帐户基础上生成的公钥.
现在,当我决定升级我的应用程序时,我应该怎么做?嵌入公钥用于申请还是仍然使用公钥作为帐户?
我没有在Google的Android开发者网站上找到任何线索......
使用2048位密钥时使用的是什么是RSA加密输出大小(使用pkcs1padding).是否总是256字节独立于输入大小?我如何计算其他关键尺寸?
我的任务是重现下面的情节:
它来自这个期刊(第 137-145 页)
在本文中,作者描述了一种针对 Diffie-Hellman 密钥交换的名为 SETUP 的窃取攻击。特别是,他们编写了这个算法:
现在,在2中作者认为“也许我们可以实现诚实的 DHKE 和恶意的 DHKE,然后我们比较两种算法的运行时间”。然后,创建了上面的情节。为此,他们说
“我们在 ANSI C 中实施了受污染和未受污染的 Diffie-Hellman 协议版本,并使用 GNU C v 2.7 编译器与 RSAREF 2.0 库链接。所有测试均在 Linux 系统上运行,使用一台配备 Pentium II 处理器(350 MHz)和 64 Mb 内存。单个协议的计算时间测量为 10-2 秒。”
我想做同样的事情,即实现善恶DH并比较运行时间。这是我生成的代码:
import timeit #used to measure the running time of functions
import matplotlib.pyplot as plt #plot the results
import random
import numpy as np
import pyDH #library for Diffie-Hellman key exchange
X= pyDH.DiffieHellman() #Eve's private key …Run Code Online (Sandbox Code Playgroud) 简而言之,这是我的问题:
private string publicKeyString = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVGUzbydMZS+fnkGTsUkDKEyFOGwghR234d5GjPnMIC0RFtXtw2tdcNM8I9Qk+h6fnPHiA7r27iHBfdxTP3oegQJWpbY2RMwSmOs02eQqpKx4QtIjWqkKk2Gmck5cll9GCoI8AUAA5e0D02T0ZgINDmo5yGPhGAAmqYrm8YiupwQIDAQAB";
/* Some transformation required, using publicKeyString to initiate a new RSACryptoServiceProvider object
*/
//for now:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] selfComputedHash = new byte[]; //left out of the example
byte[] signature = new byte[];
bool result = rsa.VerifyHash(selfComputedHash, CryptoConfig.MapNameToOID("SHA1"), signature);
Run Code Online (Sandbox Code Playgroud)
如您所见,问题是使用给定的Base64编码公钥字符串启动新的RSACryptoServiceProvider.我已经能够使用对象RSAParameters进行实例化,该对象使用OpenSSL shell命令从用于此公钥字符串的Modulus和Exponent加载byte [].但由于此公钥可能在将来发生变化,因此我希望能够将其以原始形式存储在数据库中.必须有一种更直接的方式来解决这个问题.
到目前为止,我读过的很多例子都是通过从密钥容器对象导出和导入生成的私钥和公钥来避免这个问题,并在同一段代码中使用它,因此不会"转移"密钥一些字符串形式的内存不足.有些人在StackOverflow和其他网站上都表达了同样的问题,但我还没有找到令人满意的答案.
任何想法都非常受欢迎.
背景信息:我的通信伙伴从可变长度的输入字符串计算一个20字节的SHA1哈希值,该字符串由ASCII编码消息的几个字段中包含的信息组成.然后使用我的合作伙伴的私钥对此哈希进行RSA签名,并将ASCII消息一起发送给我.到达后,我自己计算SHA1哈希,使用ASCII消息中的相同字段,然后尝试通过调用VerifyHash来验证这些字段是否未被更改.
密钥以两种形式提供:常规和"noNL".noNL版本包含在上面的代码中,常规版本是这样的:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVGUzbydMZS+fnkGTsUkDKEyFO
GwghR234d5GjPnMIC0RFtXtw2tdcNM8I9Qk+h6fnPHiA7r27iHBfdxTP3oegQJWp
bY2RMwSmOs02eQqpKx4QtIjWqkKk2Gmck5cll9GCoI8AUAA5e0D02T0ZgINDmo5y
GPhGAAmqYrm8YiupwQIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud) 我想做一个简单的公钥(非对称)加密.它没有安全感,我只是想了解它们背后的概念.例如,我知道可以使用XOR制作简单的对称密码.我在stackexchange的一个线程中看到你需要使用trapdoor函数,但是我找不到它们.我想说,取一组字节,并能够将它们分开以获得公钥/私钥.我得到了共同秘密的想法.比方说,我生成256的随机数(完全不是随机数:P),我把它分成200和56.如果我用200进行XOR,我只能用200解密.我希望能够分割数字随机的,这样能够不对称地做到这一点.
java encryption cryptography encryption-asymmetric public-key-encryption
请问您能否建议在.NET平台上使用椭圆曲线加密的任何实现?
此外,如果你使用过它们,你能告诉我应该使用的推荐曲线吗?
[编辑]
正如@FatCat所提到的,它的实现在.NET framework 3.5中可用,但只能在windows vista上使用.你能建议另一种方式/图书馆使用吗?
.net encryption cryptography elliptic-curve public-key-encryption
加密日志文件作为保护可能包含在其中的个人数据的手段的建议很普遍.
我没有看到的是一个很好的参考实现,考虑到有多少公司需要它,这是令人惊讶的.
在我们的特定情况下,我们希望使用公钥加密,以便无法在生成它们的(弱保护)系统上读取文件,并且必须将其发送回总部,我们可以在其中查看它们.
我到目前为止看到的最好建议是"使用log4net,但使用BouncyCastle的RFC 3852流实现编写自己的appender".有人有进展吗?
我正在寻找一种在Java中以编程方式创建ssh兼容的id_rsa和id_rsa.pub文件的方法.
我创建了KeyPair:
KeyPairGenerator generator;
generator = KeyPairGenerator.getInstance("RSA");
// or: generator = KeyPairGenerator.getInstance("DSA");
generator.initialize(2048);
keyPair = generator.genKeyPair();
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何在KeyPair中创建PrivateKey和PublicKey的String表示.
据我所知,通过SSL,浏览器获取安全网站的公钥,并通过公钥加密rsa算法,这两个建立会话密钥,然后通过一些对称算法继续通信,因为对称密钥加密/解密更快.SSL使用哪种对称密钥算法?DES?AES?或者是其他东西?
ssl cryptography rsa public-key-encryption encryption-symmetric
常规应用程序开发人员有什么机会(我的意思是,你不是一个百万美元的内容制作公司或分销渠道提供商,而是一个普通的小型应用程序开发公司)来保护应用程序的视频/音频内容不被保存/分散式.我提到了"常规开发者",因为我在Android核心代码中已经看到索尼在DRM包中添加了一些代码部分.让我们假设我们与谷歌谈论将其包含在核心代码中并不是那么强大.
是否有任何真正安全的方法来保护Android上的视频/音频(作为应用程序的一部分).
假设(如果我错了,请纠正我):
我已经研究过这个主题了很多,搜索了很多,希望在这里完成所有相关的问题,我已经和一个DRM提供商(这是一个很小的公司或自由开发者很难联系,或至少获得一些真实的相关信息,技术文档和细节).
我将DRM视为一种方法,但"默默无闻"似乎并不是一种非常好的方法.此外,我还没有为常规开发人员找到任何信息或真正的解决方案/ API.
公钥加密是另一个想法,但在哪里真正安全地存储私钥?此外,我假设在这种情况下,需要重写整个媒体框架和播放器,以便将安全视频流传递给播放器.还是我弄错了?
我希望得到该领域其他经验丰富的开发人员的一些意见,因为很难在任何地方找到有关Android媒体内容保护的信息.
更新:
在我的问题的上下文中,我发现了这个问题并且它的更新很有趣:流式传输到Android MediaPlayer
cryptography ×5
encryption ×4
.net ×2
android ×2
c# ×2
java ×2
rsa ×2
android-lvl ×1
drm ×1
hash ×1
logging ×1
openssh ×1
python ×1
ssh ×1
ssl ×1