WEBVTT

1
00:00:00.000 --> 00:00:05.984
畫面這十六個 bytes 是一筆明文，金鑰也有十六 bytes。

2
00:00:05.984 --> 00:00:11.768
AES 一二八先把兩者 XOR，再跑十輪，交出同樣長度的密文。

3
00:00:11.768 --> 00:00:18.749
AES 一九二和二五六增加金鑰長度與輪數，資料區塊仍是這十六 bytes。

4
00:00:18.749 --> 00:00:26.927
接下來只看單區塊加密核心的教學架構；解密和整份訊息的
模式不在這條路徑裡，也沒有宣稱 

5
00:00:26.927 --> 00:00:29.670
RTL 或晶片已完成驗證。

6
00:00:29.958 --> 00:00:35.069
明文被接受後，先存進 state，來源才能換下一筆。

7
00:00:35.069 --> 00:00:42.533
資料路徑依 state 算新值，金鑰路徑提供這輪的 
key，控制器決定哪個緣保存。

8
00:00:42.533 --> 00:00:48.425
組合電路在緣之後就依輸入計算，不是等下一個 clock 才開始。

9
00:00:48.425 --> 00:00:52.354
下一緣要收正確值，整條路徑就得提前穩定。

10
00:00:52.354 --> 00:00:56.828
資料看起來亂不亂，不會告訴控制器是否完成。

11
00:00:57.083 --> 00:01:02.853
這個例子每輪把結果寫回同一組 state，再走同一套 round。

12
00:01:02.853 --> 00:01:05.009
十輪因此不需要十套硬體。

13
00:01:05.009 --> 00:01:07.525
這叫 iterative 架構。

14
00:01:07.525 --> 00:01:12.196
輪是演算法的一步，週期是硬體的時間；這裡選一輪一拍。

15
00:01:12.196 --> 00:01:19.553
若改用更少電路分時算，或加管線暫存器，控制器就得重新
安排，不會自然保留原拍數。

16
00:01:19.833 --> 00:01:22.206
先固定 state 怎麼排。

17
00:01:22.206 --> 00:01:26.732
最高 byte 是 B 零，放在 row 零、column 零。

18
00:01:26.732 --> 00:01:31.259
B 一往下，四個 bytes 填滿第一直欄，再放下一欄。

19
00:01:31.259 --> 00:01:35.242
公式是 B 的索引等於四乘 column 加 row。

20
00:01:35.242 --> 00:01:41.579
這個 column major 約定會一路用到密文輸出；不能中途改成橫著讀。

21
00:01:41.579 --> 00:01:44.463
先用十六個不同標記檢查接線。

22
00:01:44.750 --> 00:01:48.272
剛載入明文，先只做 AddRoundKey。

23
00:01:48.272 --> 00:01:54.282
第一到第九輪沿 SubBytes、ShiftRows
、MixColumns 再到 

24
00:01:54.282 --> 00:01:56.180
AddRoundKey。

25
00:01:56.180 --> 00:01:59.501
第十輪繞過 MixColumns，其餘照做。

26
00:01:59.501 --> 00:02:02.190
控制器要選對這條路，也要選對金鑰。

27
00:02:02.190 --> 00:02:06.020
把第一輪攤開，先看 SubBytes 怎麼換值。

28
00:02:06.292 --> 00:02:11.777
SubBytes 把每個 byte 經過同一張非線性 S box。

29
00:02:11.777 --> 00:02:15.175
位置不動，例如十六進位五三換成 ed。

30
00:02:15.175 --> 00:02:20.272
十六個組合 S box 可以同時算，沒有先後查十六次的必要。

31
00:02:20.272 --> 00:02:28.362
若硬體只放一個 S box 分時使用，要再存中間結果
並安排順序；這就不是現在的一輪一拍。

32
00:02:28.625 --> 00:02:34.945
ShiftRows 的 row 零不動，其他橫列分別循環左移一、二、三格。

33
00:02:34.945 --> 00:02:39.625
byte 的值都沒變，只是下一步同一欄會遇到不同來源。

34
00:02:39.625 --> 00:02:45.205
這個固定排列通常用接線做，不需要每拍移一格，也不用可變位移器。

35
00:02:45.205 --> 00:02:50.055
讓標記沿線走一次，比拿最後密文查哪條線接錯更容易。

36
00:02:50.333 --> 00:02:57.020
接著 MixColumns 把一個直欄的四個 bytes
 混合，四欄各自獨立。

37
00:02:57.020 --> 00:02:59.801
每個輸出都用到這欄的四個輸入。

38
00:02:59.801 --> 00:03:05.917
乘二和乘三是在有限體裡算，結果可以還原，沒有把資料平均掉或雜湊掉。

39
00:03:05.917 --> 00:03:10.180
畫面只做直欄，標準沒有另外一個 MixRows。

40
00:03:10.180 --> 00:03:12.569
接下來先看乘二怎麼接。

41
00:03:12.833 --> 00:03:16.902
xtime 左移一位，丟掉出去的最高位。

42
00:03:16.902 --> 00:03:20.975
原本最高位是一，就再 XOR 十六進位一 b。

43
00:03:20.975 --> 00:03:27.899
五七變 ae 時不用 reduction；ae 再乘二得到四七，就用到了它。

44
00:03:27.899 --> 00:03:30.750
乘三是 xtime XOR 原值。

45
00:03:30.750 --> 00:03:37.673
把這些接成一欄，db、一三、五三、四五應得到八 e、四 d、a 一、bc。

46
00:03:37.673 --> 00:03:45.063
四 bytes 的已知答案能分開查係數、算術與排列，再接四欄。

47
00:03:45.333 --> 00:03:52.781
AddRoundKey 用 state 和 round
 key 做一百二十八位元 XOR。

48
00:03:52.781 --> 00:03:59.456
兩邊採相同 byte 排列，各位同時運作，沒有進位，也不需要一百二十八拍。

49
00:03:59.456 --> 00:04:01.745
五三 XOR ca 就是九九。

50
00:04:01.745 --> 00:04:06.322
其他轉換都是公開規則；這個步驟把 key 接到資料。

51
00:04:06.322 --> 00:04:09.723
下一段要看每輪的 key 從哪裡來。

52
00:04:10.000 --> 00:04:16.514
最後一輪把 ShiftRows 的輸出直接送 AddRoundKey，略過 

53
00:04:16.514 --> 00:04:18.557
MixColumns。

54
00:04:18.557 --> 00:04:21.157
其他三步仍在，金鑰要用 K 十。

55
00:04:21.157 --> 00:04:27.285
用 selector 繞過共用電路就能做，不必另外複製完整 round。

56
00:04:27.285 --> 00:04:30.628
把路徑選對卻仍用 K 九，密文一樣會錯。

57
00:04:30.628 --> 00:04:35.435
檢查 counter 時，也要看它實際控制了哪條線。

58
00:04:35.708 --> 00:04:41.727
原始 K 零留在自己的暫存器，working key 隨輪次前進到 K 十。

59
00:04:41.727 --> 00:04:45.908
處理下一筆明文時，working 要重新載 K 零。

60
00:04:45.908 --> 00:04:50.999
若直接從上一筆 K 十繼續展開，第一筆可能全對，第二筆才錯。

61
00:04:50.999 --> 00:04:56.258
所以連續兩筆使用相同 key 的測試，有它自己的檢查目的。

62
00:04:56.542 --> 00:04:59.343
把 key 切成四個三十二位元字。

63
00:04:59.343 --> 00:05:04.373
最後一字先 RotWord 換 byte 位置，再過四個 S box 做 

64
00:05:04.373 --> 00:05:08.188
SubWord，XOR 高 byte 的 Rcon。

65
00:05:08.188 --> 00:05:12.524
得到 temp 後，舊第一字 XOR temp 成新第一字。

66
00:05:12.524 --> 00:05:16.339
接著每個新字，用自己的舊值 XOR 前一個新值。

67
00:05:16.339 --> 00:05:20.502
這條組合鏈產生下一把 key，不用向來源討另一把。

68
00:05:20.502 --> 00:05:27.172
K 零到 K 十共十一把，Rcon 用一到十輪，索引要對齊。

69
00:05:27.458 --> 00:05:31.541
初始 XOR 用 K 零，working 這拍不前進。

70
00:05:31.541 --> 00:05:34.541
第 r 輪開始，暫存器還是 K 的 r 減一。

71
00:05:34.541 --> 00:05:39.660
組合展開算出 K 的 r，直接送到這輪的 AddRoundKey。

72
00:05:39.660 --> 00:05:43.189
輪末把新 state 和新 key 一起存下來。

73
00:05:43.189 --> 00:05:51.128
若拿舊 working 暫存器直接接 XOR，key
 就晚一輪；非阻塞賦值不會替這條接線補救。

74
00:05:51.417 --> 00:05:53.516
假設 key 已載入。

75
00:05:53.516 --> 00:06:01.956
E 零收明文，E 一做初始 XOR；E 二到 E 十
跑一般輪，E 十一完成最後輪，輸出才有效。

76
00:06:01.956 --> 00:06:05.333
最早 E 十二交付，E 十三收下一筆。

77
00:06:05.333 --> 00:06:09.975
接受到有效十一拍，沒有停頓時交易間隔十三拍。

78
00:06:09.975 --> 00:06:15.883
這個排程同拍需要十六個資料 S box 加四個 key S box。

79
00:06:15.883 --> 00:06:20.737
若改同步記憶體或共用較少 S box，就要改拍數。

80
00:06:20.737 --> 00:06:25.252
真正時脈頻率仍由實作時序收斂決定。

81
00:06:25.542 --> 00:06:30.430
控制器從 NO_KEY 等 key，載入後到 READY 等明文。

82
00:06:30.430 --> 00:06:35.285
接著分初始、一般、最後輪，最後停在 OUTPUT_HOLD。

83
00:06:35.285 --> 00:06:40.141
round counter 無法單獨表達沒有 key 或等接收端。

84
00:06:40.141 --> 00:06:45.833
這裡 busy 代表交易還沒結束，所以密文算完卻未交付，busy 仍是一。

85
00:06:45.833 --> 00:06:49.532
要等接收端真的收下密文，才回 READY。

86
00:06:49.792 --> 00:06:57.150
READY 時兩個 valid 都是一，這個介面先收
 key，把 in_ready 壓成零。

87
00:06:57.150 --> 00:07:00.371
明文來源繼續保留資料，等下一次握手。

88
00:07:00.371 --> 00:07:04.665
這樣換 key 的邊緣就不會偷偷用舊 key 收走明文。

89
00:07:04.665 --> 00:07:10.742
key 和明文雖然分通道，誰優先仍是介面契約，不能讓兩邊各猜一次。

90
00:07:11.000 --> 00:07:15.583
密文已有效，不必等 ready 才提出 valid。

91
00:07:15.583 --> 00:07:23.778
下游還沒 ready，out_valid 和密文都保
持，核心不能重算，也不能收新資料覆蓋。

92
00:07:23.778 --> 00:07:30.066
若延到 E 十四才接受，這個緣之後才回 READY，下一筆最早 E 十五收。

93
00:07:30.066 --> 00:07:34.990
把動畫停在這裡看，答案算完和交易結束是兩個時點。

94
00:07:35.292 --> 00:07:41.736
低有效同步 reset 在上升緣清 state、原始
 key、working key 

95
00:07:41.736 --> 00:07:44.605
和 counter，回 NO_KEY。

96
00:07:44.605 --> 00:07:49.836
沒交付的交易取消，reset 期間 ready 與 valid 都是零。

97
00:07:49.836 --> 00:07:51.693
解除後先重新載 key。

98
00:07:51.693 --> 00:07:58.962
這裡描述功能上清暫存器的流程；產品級金鑰抹除與側通道
認證，還需要另外的設計和證據。

99
00:07:59.250 --> 00:08:05.556
用畫面的標準 key 與明文，初始 XOR 得到零零
一零二零三零一路到 e 零 f 零。

100
00:08:05.556 --> 00:08:13.357
接著沿第一輪比較 SubBytes、ShiftRows
、MixColumns、K 一與輪末結果。

101
00:08:13.357 --> 00:08:18.445
完整十六 bytes 留在畫面，排列一直採相同 packed 順序。

102
00:08:18.445 --> 00:08:20.650
最後密文以六十九 c 四開頭。

103
00:08:20.650 --> 00:08:30.242
若第一次就在 ShiftRows 不同，先查排列；若
前三步對而輪末錯，就查 K 一與 XOR。

104
00:08:30.242 --> 00:08:33.000
不用等到最後密文才猜。

105
00:08:33.250 --> 00:08:39.861
S box 先測完整二百五十六種輸入，再測排列、有限體、一般輪和最後輪。

106
00:08:39.861 --> 00:08:43.821
key expansion 獨立比對後才整合。

107
00:08:43.821 --> 00:08:48.913
交易還要測連續兩筆、key 同拍競爭、背壓和 reset。

108
00:08:48.913 --> 00:08:56.456
scoreboard 只在握手緣記一筆，查值、數量與
順序；停太久要 timeout。

109
00:08:56.456 --> 00:09:00.200
這些控制情境，單一正確密文沒有測到。

110
00:09:00.458 --> 00:09:06.911
把十六個資料 S box 改成只用一個，第一輪能照舊在一拍完成嗎？

111
00:09:06.911 --> 00:09:12.956
需要存中間 bytes，重排控制，也要改先前的十一與十三拍。

112
00:09:12.956 --> 00:09:17.750
功能階層不要求每層各複製電路，共用得配合排程。

113
00:09:17.750 --> 00:09:25.254
核心之外，訊息還需要合適模式、nonce 或 IV 
規則、key 管理與完整性。

114
00:09:25.254 --> 00:09:31.648
解密、匯流排、管線、抗故障與側通道，也沒有由這個向量驗完。
