Tag: 加密

如何破解弱化的TEA分组密码?

目前我正在尝试在C中破解TEA分组密码。这是一个分配,并且茶密码已经弱化,因此密钥是2个16位数字。 我们已经获得了使用密钥对明文进行编码的代码,并使用密钥对密文进行解码。 我有一些明文的例子: 明文(1234,5678)编码(3e08,fbab) 明文(6789,dabc)编码(6617,72b5) 更新 编码方法采用明文和密钥编码(明文,密钥1)。 这又发生了另一个密钥,用于创建编码消息,编码(密文,密钥),然后创建编码(3e08,fbab)或编码(6617,72b5)。 我该如何破解这个密码呢? 目前,我用每个可能的密钥编码已知的明文; 密钥大小为hex值ffffffff。 我把它写到文件中。 但现在我陷入困境,需要指导。 我如何使用TEA的等效密钥的弱点来减少破解密码所需的时间? 另外,我打算用中间人攻击。 当我使用已知明文和所有密钥1进行编码时,它将创建具有关联密钥的所有加密文本并将其存储在表中。 然后,我将使用key2中所有可能值的已知密文进行解密。 这将给我一个解密表,只有一次解密。 然后,我可以将两个表一起比较,看看是否有任何一个带有key1的包含与使用key2的解密相匹配。 我也想使用equilenvent的弱点,如果有人可以帮助我在代码中实现这一点,这将是伟大的。 有任何想法吗?

如何将pem公钥转换为openssl RSA *结构

假设我必须像这样公开pem键 —–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp/TR+fQi62F79RHWmwKOtFmwteURgLbj7D/WGuNLGOfa/2vse3G2 eHnHl5CB8ruRX9fBl/KgwCVr2JaEuUm66bBQeP5XeBotdR4cvX38uPYivCDdPjJ1 QWPdspTBKcxeFbccDwIDAQAB —–END PUBLIC KEY—– 我想使用openssl int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to,RSA *rsa, int padding) 。 如何将pem键转换为RSA *rsa结构? 仅供参考:我不能使用BIO,因为我只想将openssl移植到没有UNIX文件系统的引导加载程序中。 我能做的唯一方法是将公钥转换为C数组。

使用零流优化更新MD5 / SHA1

是否可以优化function: MD5_Update(&ctx_d, buf, num); 如果你知道buf只包含零? 或者这在数学上是不可能的? 同样适用于SHA1。

屏蔽是否有效阻止侧通道攻击?

我正在使用一些bigint公钥加密代码。 使用按位屏蔽以确保访问的计算时序和存储器地址与数据值无关是否安全? 这种技术是否容易受到基于指令时序,功率,RF发射或其他我不知道的事情的旁道攻击? (作为参考,我知道RSA盲法,EC Montgomery梯形图,缓存刷新等技术。) 简单代码示例(C / C ++): uint a = (…), b = (…); if (a < b) a += b; 现在翻译为使用恒定时间屏蔽: uint a = (…), b = (…); uint mask = -(uint)(a < b); a = ((a + b) & mask) | (a & ~mask); 注意a < b是0或1,掩码是0x00000000或0xFFFFFFFF。 同样,对于高级操作(C ++): Integer x […]

穷人序列号生成方案

我想得到一些简单的方案/算法,用于根据一些独特的硬件ID(cpu id或以太网mac地址或硬盘序列号)生成序列号。 我希望方案只能在一个方向上工作 – 因此客户端计算机上的应用程序可以validation序列号但不生成序列号。 (所以破解并不简单)。 现在很可能你们大多数人都会推荐某种RSA公钥/私钥对加密,它可以足够可靠地工作 – 客户端没有私有RSA密钥,所以他不能“生成”序列号。 但是RSA签名的主要问题是它太大了 – 它的签名大小是128或256字节,具体取决于RSA密钥大小( RSA签名大小? ) 我希望序列号是从邮件到注册表单的简单复制粘贴 – 所以最多64个字符,理想情况下是32个字节。 好吧,现在你可能会说这种保护措施不足以抵御蛮力的黑客行为 – 你只需要尝试所有组合以确定正确的序列号。 但我想说,通常你需要聘请“昂贵”的黑客或黑客团队来创建这种暴力破解应用程序。 此外,我认为可以为下一版本的应用程序更改序列号生成算法,或使用多轮传递来显着减慢暴力。 作为基础,我更喜欢使用普通的C或C ++(而不是C#),最好是Windows / wincrypt.h或任何现有的普通C源代码(最好不是巨大的第3方库)。 是否可以创建RSA公钥/私钥对,因此签名大小为32个字符?

嵌入式系统文件加密库

我有一个项目,其中一部分是将加密技术融入FAT文件系统。 该项目的目标不是加密,所以我可以自由使用开源预先完成的库。 理想情况下,我所追求的是一个使用RSA的C库,它已经具有计算密钥和加密/解密文件的方法。

如何编写一个常量时间函数来将最高有效位复制到所有位

我想在C中编写一个函数,它接受uint8_t的MSB,如果设置了,则返回0xFF ,如果不是0x00 。 简而言之,它返回一个整数,其中所有位都设置为与MSB相同的值。 但我想以完全恒定的时间方式完成它,没有分支,没有数组偏移,只是数学运算,保证总是触摸相同的位数。 理想情况下,没有任何未定义的行为。 如何才能做到这一点?

OSX中的python crypt

我有一个Django应用程序,它重置在Ubuntu机器上运行的unix用户密码,但我的开发环境是OS X,我遇到了这种烦人的情况: OS X: >>> import crypt >>> crypt.crypt(‘test’,’$1$VFvON1xK$’) ‘$1SoNol0Ye6Xk’ Linux的: >>> import crypt >>> crypt.crypt(‘test’,’$1$VFvON1xK$’) ‘$1$VFvON1xK$SboCDZGBieKF1ns2GBfY50’ 从阅读pydoc for crypt ,我看到它使用了特定于操作系统的crypt实现,因此我还在两个系统中测试了以下代码,结果与Python相同: #include int main() { char *des = crypt(“test”,”$1$VFvON1xK$ls4Zz4XTEuVI.1PnYm28.1″); puts(des); } 我怎样才能让OS X的crypt()实现生成与Linux crypt()相同的结果? 为什么不是Python实现所涵盖的(正如我期望从这种情况进行跨平台部署)?

如何计算X.509证书的SHA-1指纹?

我正在尝试从头开始实现X.509证书生成器(我知道现有的,但我还需要另一个)。 我无法理解的是如何计算证书的SHA-1(或任何其他)指纹。 RFC5280表示签名函数的输入是DER编码的tbsCertificate字段。 不幸的是,我计算的哈希值与OpenSSL产生的哈希值不同。 这是一个循序渐进的例子。 使用OpenSSL的x509工具生成证书(以二进制DERforms, 而不是 ASCII PEM) 使用openssl x509 -fingerprint计算其SHA-1哈希值 使用dd(或其他任何东西)提取TBS字段并将其存储在单独的文件中; 使用sha1sum实用程序计算其哈希值 现在,我在第2步和第3步得到的哈希值是不同的。 有人可以给我一个提示我可能做错了吗?

使用CryptUnprotectData解密WEP wlan配置文件密钥

我正在尝试使用CryptUnprotectData解密WEP配置文件的密钥。 我获取配置文件密钥的方法是使用netsh导出配置文件。 netsh wlan export profile name=”MyWEP” folder=”./” 现在,我手动将密钥材料从netsh命令生成的.xml文件复制到我的程序。 顺便说一下,我正在解密的是 – DATA_BLOB DataOut, DataVerify; DataOut.cbData = encryptData.length(); DataOut.pbData = (BYTE*)(“I_Manually_Copy_The_WEP_Key_Here”); if (CryptUnprotectData( &DataOut, NULL, NULL, NULL, NULL, 0, &DataVerify)) { printf(“The decrypted data is: %s\n”, DataVerify.pbData); } else { printf(“Failed. Error Code: %d”, GetLastError()); } 但我收到错误代码13引用无效数据。 我究竟做错了什么 ? 在Win 7及更高版本中,我可以直接使用WlanGetProfile和参数WLAN_PROFILE_GET_PLAINTEXT_KEY 。 但我在Vista上没有选择使用CryptUnprotectData函数。 我在 这里看过类似的post,但是没有得到太多有用的信息。 此外,我使用相同的系统具有相同的用户登录凭据。 […]