首页
社区
课程
招聘
[原创]The XOR Secret in Our Computer System
2009-5-5 02:46 54548

[原创]The XOR Secret in Our Computer System

2009-5-5 02:46
54548
收藏
免费 7
打赏
分享
最新回复 (84)
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
4nil 13 2009-5-10 17:59
26
0
【翻译】The Svin 的OpCode教程(22楼提供doc和pdf版本下载)
这个介绍了点指令和机器码多映射的关系.
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-5-10 19:14
27
0
我看的懂 machine code,也知道 Op Code format,謝謝。

在我文章的 reference [3]裏,有 【Intel Corporation, Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference】原廠的材料。

我的重點已經在 18 樓及 23 樓說明。

再次謝謝大家的熱情參與。
雪    币: 226
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Thinker 2009-5-11 12:17
28
0
我去好好消化啦
雪    币: 228
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Xacs 2009-5-11 19:52
29
0
谢谢楼主分享。

不知道能不能理解。
雪    币: 104
活跃值: (72)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
hash 2009-5-13 10:31
30
0
台湾地区的安全网站接触甚少。楼主可否推荐一些·
雪    币: 213
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seamoon 2009-5-19 16:03
31
0
好象没看懂
如果 用adc指令把 r和s 相加
再 r xor s
是不是就可以判断了呢
雪    币: 238
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
chjshen 1 2009-5-19 16:56
32
0
有点意思,SZ的意思是可能出现安全问题,但是在安全设计时不一定只用XOR呀,还可能会出现其他的加密算法,我想这个应该不是太大的安全问题吧,以后看来得注意一下了
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-5-19 17:10
33
0
我建議先看 An improved signature scheme without using one-way Hash functions.pdf  這篇會比較容易理解。
雪    币: 4419
活跃值: (894)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenchsha 2009-6-3 14:51
34
0
看看``````````````
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-9-25 16:20
35
0
很易懂,写得不错
(A) ⊕ (B) = (-A) ⊕ (-B)
就是说虽然负数虽然在我们看来前面多了个负号,但是计算机是通过在补码来表示的,导致两个负数都补1后XOR结果相同。

嗯,好像可以减少一半的探测次数,得到 (-A) 也就知道 (A) 了。
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-9-25 17:08
36
0
自己寫一個小小的 source C code, 然後去實際驗證看看就知道了。
把驗證結果 post 在後面,我想看您的實驗結果。
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-9-27 09:08
37
0
写程序下才发现之前我完全没懂 原来XOR相同只在一定条件下成立。
我测试了(整数) -100000 ~ 100000 以内的数xor:
两个数都是奇数时是100%,
都是偶数时为33%,
一奇一偶怎么凑也是0%


直接看代码吧,附上工程和可执行程序:
#include <stdio.h>
#include <stdlib.h>

#define u_int32_t unsigned int

void printXORImpact(u_int32_t nSize)
{
  int i, j;
  u_int32_t temp;
  u_int32_t count = 0, sum = 0;
  
  if (nSize == 0) return;
  for (i = 0; i < nSize; i++)
  {
    for (j = 0; j < nSize; j++)
    if ((i % 2 != 0) && (j % 2 != 0))          // 奇数
    //if ((i % 2 == 0) && (j % 2 == 0))          // 偶数
    {
      temp = (-1*i)^(-1*j);
      if (temp == (i^j)) {
        count++;
        //printf("Impact at (%d xor %d)\n", i, j);
      }
      sum++;
    }
  }
  
  printf("XOR Impact %d/%d times, %.2f%%\n", count, sum, (double)count/sum*100);
  return;
}

int main(int argc, char *argv[])
{
  printXORImpact(1000);
  
  system("PAUSE");	
  return 0;
}
上传的附件:
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-9-27 16:20
38
0
1) 兩奇數:機率 二分之一。
2) 一奇一偶數:機率 零。
3) 兩偶數:機率二分之一。

Ps. 請看 【分享+讨论】对 XOR_password 及XOR_cryptanalyiss 等相关论文研讨。(No. 2) 裏面有附一篇 paper.pdf 的論文,其中有說明這個機率的計算方式;另外,論文中的 Lemma 4 及 Lemma 5 有給出完整證明。
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-9-27 18:28
39
0
看过那篇paper了
以奇数来说,当两两均为奇数时, (A⊕ B) = (-A⊕ -B) 条件永远成立。当两两均为偶数时,要符合特定条件才会成立。由于计算过程,有点复杂,非本文探讨主轴,因此未列其中

两个数都是奇数的概率是100%吧,那篇论文的 Lemma 4 不就是在证明奇数时相等?倒是 Lemma 5 没见着,估计版主是截掉了

另外,为什么两偶数是50%?我用程序穷举了-10000 ~ 10000 之间的数XOR(就是上面程序,把偶数那个if的注释去掉),结果是33.32%。
一奇一偶倒是0%,这样加起来是 100%*0.25 + 33.32%*0.25 = 33.3%
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-9-27 21:07
40
0
1) 我這裏的機率 二分之一,四分之一,不同於你的 機率100%。
2) 當兩數A, B 均為奇數時,必有 (A) ⊕ (B) = (-A) ⊕ (-B) 這樣的現象。
3) 當兩數A, B 為一奇一偶數時,不會有 (A) ⊕ (B) = (-A) ⊕ (-B) 這樣的現象。
4) 當兩數A, B 均為偶數時,在某種條件下存在 (A) ⊕ (B) = (-A) ⊕ (-B) 這樣的現象。

這個機率怎麼算呢?
請看以下這個圖的算法:


想一想 s 不是偶數就是奇數,對不對?
想一想 r 不是偶數就是奇數,對不對?

那,當 r 及 s 均為奇數,機率就是 四分之一。
那,當 r 及 s 為一奇一偶數,機率就是 二分之一。
那,當 r 及 s 均為偶數,機率就是 四分之一。

小結,這個無關乎窮舉法。
Lemma 5 是我漏掉了,改天等 paper 登出來後,再補上。
上传的附件:
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-9-28 11:07
41
0
可能是我理解錯了,我對2-3這兩點沒意見
我們先討論對于 (A) ⊕ (B) = (-A) ⊕ (-B) 這個公式
當兩數A, B 均為奇數時,這個式子成立的概率是 100% (必有 (A) ⊕ (B) = (-A) ⊕ (-B) 這樣的現象)
當兩數A, B 為一奇一偶數時,式子成立的概率是 0% (不會有 (A) ⊕ (B) = (-A) ⊕ (-B) 這樣的現象)


也許我上面沒說清楚,我窮舉得出的是對于第4點這個成立的概率:

4) 當兩數A, B 均為偶數時,在某種條件下存在 (A) ⊕ (B) = (-A) ⊕ (-B) 這樣的現象。

當A, B 均為偶數時,(A) ⊕ (B) = (-A) ⊕ (-B) 成立的概率是 33.33%,不知這點版主同意否?

現在我不明白的是這個“二分之一,四分之一”指的是什麽

1) 我這裏的機率 二分之一,四分之一,不同於你的 機率100%。

是說A, B均為奇數時 (A) ⊕ (B) = (-A) ⊕ (-B) 成立的概率(我說的100%是指這個)?還是A, B均為奇數的概率(應該是指這個吧)?恕我愚鈍,我似乎把自己給繞進去了...

ps: 這個我知道,r, s同時是奇偶數的概率很明顯
那,當 r 及 s 均為奇數,機率就是 四分之一。
那,當 r 及 s 為一奇一偶數,機率就是 二分之一。
那,當 r 及 s 均為偶數,機率就是 四分之一。

需要確定的是 r, s同爲奇數情况下 (A) ⊕ (B) = (-A) ⊕ (-B) 成立的概率 以及 r, s同爲偶數情况下 (A) ⊕ (B) = (-A) ⊕ (-B) 成立的概率。

ps2: 一般加密中會選擇兩個大素數進行XOR操作,而素數除2外都是奇數... 所以只考慮同爲奇數、同爲偶數的情况才有意義。
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-9-28 12:25
42
0
請不要被你自己搞糊塗~~

1) 當 A, B 均為偶數時,(A) ⊕ (B) = (-A) ⊕ (-B) 成立的概率,是不是 33.33%,我不知道。
因為這涉及到 integer number 分布的狀況,就如同 prime number 的分布,要去理解它,可能要給出很完整而精確的描述。

2) 我把手上全部的 XOR 論文都 upload 上來,有空可以download 看看。
不是密碼相關或是 computer security 相關的,過濾掉即可。
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-10-19 01:04
43
0
To deryopr 大大,
    若有空,請著手改寫這個 program,至於怎麼改,等你回我 message 後,我告訴你怎麼改。
謝謝。
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-10-20 08:57
44
0
若有空,請著手改寫這個 program,至於怎麼改,等你回我 message 後,我告訴你怎麼改。
謝謝。


改个小程序的时间当然有,关注一下怎么改,版主是想验证什么方面?
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-10-20 13:25
45
0
Algorithm 已經傳給你看了,其實就是原本那個 XOR 的問題之驗證。
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-10-21 00:18
46
0
這個 program 是把 38樓 - 40樓 的關鍵內容呈現出來。
之前提到的 Lemma 4 及 Lemma 5,今天用 Language C 來實現。

Algorithm : 由我寫的,證明也由我完成。
以下這個是將 Lemma 4 及 Lemma 5 合併寫成一個 mathematical expression/equation.

Program : 由 nudtsong 完成 coding。
Revised 1: 由副壇主 Ivanov 做第一次改版 ,修正一個小地方。
// test1.c :  Design by Rock, Nudtsong and Ivanov in Oct 21 2009.
//

#include "stdio.h"


int main(int argc, char argv[])
{
	unsigned int a = 0;
	unsigned int b = 0;
	unsigned int c1 = 0;
	unsigned int c2 = 0;

LABEL_INPUT:
	// User input integer
	printf("Please input two integers: A, B must be both odd or even numbers\n");
	printf("A=");
	scanf("%d", &a);
	printf("B=");
	scanf("%d", &b);

	// Does it check A,B one odd and one even number?
	if (((0 == (a % 2)) && (0 != (b % 2)))
		|| ((0 != (a % 2)) && (0 == (b % 2))))
	{
		printf("error:A, B must be odd or even numbers\n");
		goto LABEL_INPUT;
	}
	else if ((0 != (a % 2)) && (0 != (b % 2)))	// If A,B are odd numbes
	{
		printf("A, B are odd numbers\n");
		c1 = a ^ b;
		c2 = (-a) ^ (-b);
		printf("C1=%d, C2=%d\n", c1, c2);
	}
    else	// If A, B are even numbers
    {
        //printf("A, B are even numbers\n");

        if ((0 == (a % 4)) && (0 == (b % 4))) {
            if ((0 != (a % 8)) && (0 != (b % 8)))
            {
                // A,B are divisible by 4 rather than 8
                printf("A, B be divided 4 and be not divided 8\n");
                c1 = a ^ b;
                c2 = (-a) ^ (-b);
                printf("C1=%d, C2=%d\n", c1, c2);
            }
            else {
                printf("A or B is divisible by 8\n");
                goto LABEL_INPUT;
            }
        }
        else {
            printf("A or B is not divisible by 4\n");
            goto LABEL_INPUT;
        }
    }
	
	system("pause");
	return 0;
}


以上的 code,主要驗證我提出的想法與關點是正確的,並沒有對 code 進行 optimize,請見諒。
這個 code 可以和 【分享+讨论】对 XOR_password 及XOR_cryptanalyiss 等相关论文研讨。(No. 2)相呼應。
上传的附件:
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
deryope 1 2009-10-21 08:12
47
0
这就是那个算法,就是比较A, B两个数的情况,当都是偶数时多判断一下吧,代码如下
#define ERROR_RESULT -1

// 测试两个正数的XOR值 
int TestXor(u_int32_t A, u_int32_t B)
{
  u_int32_t C1 = 0, C2 = 0;
  
  if ( (A % 2) && (B % 2) ) {           // A, B都是奇数
    C1 = A ^ B; C2 = (-1*A)^(-1*B);
  }else if ( !(A % 2) && !(B % 2) ) {   // A, B都是偶数
    if ( (!(A % 4) && !(B % 4)) && ((A % 8) && (B % 8)) ) {
      // 且整除4不整除8
      C1 = A ^ B; C2 = (-1*A)^(-1*B);
    }else
      return ERROR_RESULT;
  }else
    return ERROR_RESULT;                // A, B中有一个是奇数
  
  printf("%d xor %d, C1=0x%.8X, C2=0x%.8X\n", A, B, C1, C2);
  return 0;
}


调用方式:
  if ( ERROR_RESULT == TestXor(8, 11) ) {
    printf("输入有误!\n");
  }


不过还没想出来这个函数怎么用...
完整的工程已经传上来了,Dev-Cpp的工程文件和编译好的可执行程序,VC应该也能编译成功。输入 55,5712,28 这样的两个数进行计算。
上传的附件:
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
没有姓名 2009-12-6 17:25
48
0
恩,看明白了。不过貌似用这个xor的一般是在对称加密里,这样的话对于现有的一些加密方法影响还不是很大的。因为一般对称加密里,从密文里构造出一个可能的明文意义不太大,除非可以将该密文在明文空间中的像全部找出来或者找出符合某些条件的像。
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
rockinuk 8 2009-12-7 00:38
49
0
你說對了前幾句,但後面幾句,可能就有命題錯誤的問題。
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
没有姓名 2009-12-7 11:41
50
0
恳请指教,我对这个XOR没什么研究。有点类似强弱碰撞的那个意思,我是觉得如果是强碰撞的话对于破译密码来说影响不太大。
游客
登录 | 注册 方可回帖
返回