近代加密 小額付費

關於小額付費

另一個名稱為 微支付 (Micropayment),簡單來說提供顧客 (Consumer) - 銀行 (Broker) - 商家 (Vendor) 三方的交易。小額付費標明在交易金額小,因此交易成本也應該小,否則交易手續的計算能量就超過交易金額,更別說要扣除交易物品的成本。通常要在以下三點最小化

  • 計算資源:
    在先前提到的加密算法中,key 的 bit-length 相當長,導致計算的能量消耗大。倘若只消費 1 元,耗電成本就佔了 1% 以上,甚至更多,那麼是划不來的。
  • 儲存空間花費:
    計算每一組交易明細所需要的空間要最小,例如記錄金額需要 32-bit,那麼 n 次交易就需要 n 個 32-bit 的空間,在其他細節中還需要紀錄額外的購買來源、 … 等。
  • 管理成本:
    第三方 (通常是銀行) 要管理顧客的金額花費、商家是否能取用顧客的錢。銀行要怎麼紀錄顧客的狀態、如何驗證商家真的有跟顧客交易 … 等。

由於交易金額小,即使被破解對雙方的損失也不大。但通常破解手段需要的時間、資源往往超過交易金額,因此不太會有人去破解這個。

應用層面

網路電子報:

一份電子報可能有一些特別的標題內容,若要深入查閱內文,需要讀者付費觀看。這一部分更具有彈性,對於一份具有相當多面向的電子報而言,有些人只看幾個專欄就必須花費購買一整本的金額,有些時候是浪費的。

網路期刊購買、資料庫詢問

網路學術期刊就跟電子報的情況一樣。資料庫詢問比較特別,花費小金額來交換資料庫服務的次數。

廣告

互動式影片、廣告商為了誘拐大眾仔細觀看廣告,由廣告商付錢給觀看者。例如回答問卷回饋、機率性地抽獎回饋 … 等。

網頁閱讀

類似向大眾徵文,鼓勵分享知識。徵求到的文章,由平台供應者支付。

何時用

使用者付費,而非訂閱長時間的垃圾訊息或服務。在大多數的服務商中,會提供時間內無限使用或按照次數計費兩種方案,在大多數的情況下,時間內無限使用是對商家有利,可以預先得到使用者的投資,但使用者在後續時間內可能沒有去使用、或者沒時間去用。

不是 按照次數計費全然好 ,就如 電話費 ,打了多少通電話、講了多久,只有電信商知道,即便告訴花費相當多金額,通話明細也是由他們提供,很難證明到底花了多少,這是對使用者的不利。相較起來,小額付費比較接近投幣式的公共電話,投了多少就打多少,等到快沒有餘額時,再進行補充。

先付款給商家會對使用者不利,有可能取得不好的服務,後付款給商家會對商家不利,因為使用者可能沒有足夠的金額。正因為小額交易,適時地刷新狀態 (再投幣) 就能在之間達到平衡。

數學

由制定 RSA 那伙人 Rivest, Shamir 提供 Payword scheme 的方法。

首先,概念建立在假設不用數字儲存金額 (減少儲存空間、管理花費),而是用運算次數來知道花費金額 (用簡單運算來完成,防止能源消耗過大)。金額花費是整數,由最小單位 1 元構成,如果是在通貨膨脹的國家,最小單位可能不一樣?

那麼可以建立一個儲值金額 n 元的串列如下。

$$x_0 \leftarrow x_1 \leftarrow x_2 \leftarrow \text{ ... } \leftarrow x_{n-1} \leftarrow x_n$$

由使用者拿一個 $x_n$ 初始化,接著利用 hash $x_i = h(x_{i+1})$ 得到每一個硬幣 $x_i$。用數學表示遞迴公式 $x_i = h^{n-i}(x_n)$

當顧客跟商家交易時,簽一份簽章 (例如用 RSA 或者是 DSA 等方式) 給商家。簽章內容為

$$\text{Sign}_C(\text{Merchant-ID} || x_0 || \text{Cert})$$

其中 $\text{Cert}$ 是由第三方信任銀行簽署給用戶的內容 (類似銀行帳戶的確認)。最後發送給商家資訊為

$$\text{Sign}_C(\text{Merchant-ID} || x_0 || \text{Cert}), \text{Merchant-ID}, x_0, \text{Cert}$$

由商人去驗證 (檢查簽證內容、拿對方的 public key 打開,再去拿銀行的 public key 驗證 $\text{Cert}$ 是否正確) 是否是可信任的顧客或者是顧客是否存在。

接下來交易採用最笨的方案,每一次交易 1 元,交付 i 元時,顧客就告知 $x_i$ 值給商家,這裡顧客得到硬幣方法為重新計算 $x_i = h^{n-i}(x_n)$,可以不事先用記憶體儲存 $[x_0, x_n]$,保留 $n$ 和 $x_n$ 即可。

之後商家拿著 i 元、$x_i$$\text{Sign}_C(\text{Merchant-ID} || x_0 || \text{Cert})$ 的資訊給銀行,銀行計算 $i$ 次 hash $x_0 = h^i(x_i)$ 查看是否正確,若檢驗沒問題,則銀行從客戶存簿撥款給商家。

為什麼可行

運算過程中使用 hash,hash 提供不可逆的操作,因此商家無法有更多金額的索取,假設從顧客手中得到 $x_i$,無法計算出 $x_{i+1}$ 究竟是什麼,具有一定安全性。而顧客必須由銀行索取簽證,來表示當前的狀態是合法的,顧客沒辦法竄改自己的狀態,使得自己有更多的金錢,銀行那裏會有最新一組的簽章在?應該是吧,銀行會在商家發送驗證資訊時發生異狀檢查顧客是否竄改。

數學之美。

Read More +

近代加密 複習 續

前言

幾乎是密碼學基礎數論,看來也走到這了。

亂來

隨便寫寫,上課不專心真是抱歉。

  1. Given an integer $x$, what is the requirement to let the multiplcative inverse $x^{-1}$ exist when modulo $p$? if $x^{-1} \mod p$ exists, please write down the equation (based on Fermat’s theorem) used to compute $x^{-1} \mod p$. (5%)

    1. condition: $gcd(x, p) = 1$ for multiplcative inverse $x^{-1}$ exist when modulo $p$
    2. Fermat’s theorem :
      $x^{p-1} = 1 \mod p \Rightarrow x^{p-2} \times x = 1 \mod p$
      $x^{-1} = x^{p-2} \mod p$
  2. What is the Euler totient function $\phi(n)$? Please answer $\phi(77) = ?$
    $\phi(n)$ 表示 1 到 n 之內的整數,有多少與 n 互質的個數。
    $\phi(77) = 77 \times (1 - 1 / 7) \times (1 - 1 / 11) = 60$

  3. Whais the discrete logarithm problem? (5%)
    對於等式 $y = x^a \mod p$,已知三整數 y, x, p,解出 a 的問題。詳見小步大步算法 baby-step-giant-step,複雜度 $O(\sqrt p)$

  4. What is a hybrid cryptography? (5%)
    $$\text{hybrid cryptosystem } = \text{ public-key cryptosystem } + \text{ symmetric-key cryptosystem}$$

    • public-key cryptosystem
      提供 key encapsulation,就是 key 的安全性和簽章認證,保護 key 傳輸、保管上的問題。
    • symmetric-key cryptosystem
      提供 data encapsulation,提供高效率的加解密效能。
  5. What are the two primary reasons of using a cryptographic hash before signing a signature? (5%)
    cryptographic hash 密碼雜湊函數,通常會計算 $hash(M)$

    • 單向不可逆
      難以給定一個雜湊值,並且逆推得到當初輸入的數值。
      • 提供訊息修改檢查,相同的訊息進行雜湊,高機率會是不同。
        $hash(M1) \neq hash(M2)$,如果 M1 和 M2 差異只有數個 bits 不同。
      • 防止在傳輸過程中被竄改。對於簽章則更難竄改成相同雜湊值且具有 意義 的訊息 $M’$。
    • 容易計算
      將一個長度很大的訊息,壓縮一個固定長度的數值,這數值方便後續算法計算用加密算法的部分。
  6. Please write down the RSA public key encryption and decryption process (including public key and private key generation process). (10%)

    1. $N = p \times q$
    2. $\phi(N) = (p-1)(q-1)$
    3. $gcd(\phi(N), e) = 1, \phi(N) > e > 1$
    4. $d = e^{-1}, e \times d = 1 \mod ø(N)$
    5. public $e, N$
    6. private $p, q, d$
  7. Please develop a left-to-right binary exponentiation algorithm without “conditional jump” which is usually dangerous to some engineering attack. (10%)
    Montgomery Ladder

1
2
3
4
5
R[0] = 1, R[1] = p
for i = n-1 to 0, step = -1
R[1-a[i]] = R[0] * R[1]
R[a[i]] = R[a[i]] * R[a[i]]
return R[0]
  1. Below is the DSA signature scheme in which $p$ is a large prime, $q$ is a 160-bit prime factor of (p - 1), $g$ is an integer of order $q$ modulo $p$. Let $x$ be the signer’s private key and $y = g^x \mod p$ be the public key.

    1. How to generate an integer $g$ ? (5%)
    2. Please complete the following nissing steps of the scheme. (10%)

    3. Please describe a trick for speeding up DSA’s on-line signing process. (5%)

          _______________________________________________________________________
          Signing algorithm                 Verification algorithm
          _______________________________________________________________________
          r = (g^k mod p) mod q             w = s^-1 mod q
          k is a random integer             u1 = (SHA(m) * w) mod q
          s = ________________              u2 = (r * w) mod q
          m is the messgae                  v = _________________
          the signature is (s,r)            if v = r then the signature is correct
      
    • $g = h^{(p-1)/q} \mod p $ ,其中隨機亂數 $h$,滿足 $g > 1$ 即可。
      從費馬小定理中,有一個比較特別的計算來得到 order $q$,所謂的 order $q$ 就是在前 $q$ 個 $g^i \mod p$ 下不會出現重複 (循環長度至少為 $q$),從觀察中得知循環長度 $L$ 滿足 $L | p-1$,也就是說 $L$ 是 $p-1$ 的因數,$q$ 則是要找到一個大循環,讓攻擊者更難找到 $x$,又因為 $L$ 是其因數,由於 $q$ 是 $p-1$ 的其中一個質因數,則保證是一個最小循環節的要求。

    • $s = k(SHA(m) + x \times r)$
      $v = g^{u1} y^{u2}$

    • 可以 offline 去預處理隨機亂數 $k$,事先計算一堆的 $r$、$z = k^{-1}x \times r$,那麼計算 $s$ 可以非常的快速,$s = k^{-1} SHA(M) + z \mod p$,假設 hash 計算快速,只動用到一次乘法和加法,相較於 RSA 的簽章方法,少了指數次方運算。

  2. Under the following certificate hierarchy, please provide all the details of how end user A checking the correctness of end user C’s public key by verifying a sequence of certificates. Note: User A only knows X’s public key, but does NOT have the root Z’s public key directly. (10%)
    若 A 要確認 C 給的 public key 是否正確,則依循以下步驟來確認

    1. C 拿出 Y<<C>>,拿 Y 的 public key 進行確認 C 的 public key。
    2. 再檢查 Y 的 public key,Y 拿出 Z<<Y>>,拿 Z 的 public key 進行確認 Y 的 public key。
    3. 再檢查 Z 的 public key,Z 拿出 X<<Z>>,拿 X 的 public key 進行確認 Z 的 public key。
    4. 由於我們知道 X 的 public key (藉由實地臨櫃面對面確認 X 的 public key),最後驗證 C 給的是正確的 public key。
                            Z
                          / \          Notation used
                         X     Y         X<<A>>:
                       / \    \       A's certificate issued by X
                      A     B     C
      
  3. Pleasewrite down the Diffie-Hellman key exchange protocol (including the public key and private key generation process). (10%) What is the man-in-middle (or the middle person) attack? (5%)

    • 共同決定一個大質數 $p$ 和一個基底 $g$ (全部人都知道)
    • 每個人 A 擁有自己的 private key $x_A$ ($x_A < p - 1$)
    • 每個人 A 計算自己的 public key $y_A$ ($y_A = g^{x_A} \mod p$)

    假設有兩個人 A, B 要通訊,則把自己的 public key 交給對方,共同產生出一把暫時的 key $K_{AB}$ 進行通訊加密。

    • 對於 A 來說會接收到 $y_B$,計算 $K_{AB} = (y_B)^{x_A} = g^{x_B \times x_A} \mod p$
    • 對於 B 來說會接收到 $y_A$,計算 $K_{AB} = (y_A)^{x_B} = g^{x_A \times x_B} \mod p$
    • 由於離散對數是一個困難問題,很難藉由攔截紀錄來得到對方的 private key $x_A$,因此有一定的安全性。

    假若現在要進行中間人 C 的攻擊,則會在一開始交換 $K_{AB}$ 的時候插入到其中通訊。

    • A 發送 $y_A$ 給 B 時,受到 C 的攔截。
    • C 知道 A 想要跟 B 通訊,則把自己的 $y_C$ 發送給 B,並且也傳一份給 A。
    • B 以為是 A 要進行通訊,實質拿到 $y_C$ 而非 $y_A$。
    • 產生兩把 key $K_{AC}, K_{CB}$,C 就偷偷在中間偷聽,並且作為中繼傳送訊息,需要解密 (拿 $K_{AC} \text{ or } K_{CB}$) 之後再進行加密 $K_{CB} \text{ or } K_{AC}$ 送給另一方。

    如何防止中間人攻擊,大約有幾種方法,但牽涉到可信任第三方、計算速度。

    • 發送訊息上,計算時間的延遲不得超過一定限制,否則可能存在中間人攻擊。
    • 藉由可信任第三方 CA (Certificate Authority) 來驗證彼此的 public key 歸屬於誰
      由 CA 簽認 $Sign_{CA}(\text{public key || owner_id || expiration date || ...})$,如此一來如果存在 C 中間人,則轉交 $y_C$ 給 B 時,B 就會藉由 CA 驗證得到 owner_id 不是通訊對象 A。如果 CA 不可信任,則可以讓 C 簽一個 $Sign_{CA}(\text{public key C || owner_A || expiration date || ...})$ 來欺騙 A 和 B,也就是說 CA 和 C 偷偷在私底下做了黑心勾當,那麼中間人攻擊仍是存在的。
  4. Both message authentication code (MAC) and digital signature can be used to provide the functionality of message origin and integrity check. Please briefly describe these two techniwues and compare percisely the difference between these two techniques. (10%)
    message authentication code (文件訊息鑑別) 顧名思義就是針對 message 進行驗證,確認發送者身分和資料完整性,相較於 digital signature (數位簽章) 也是做相同的事情,訊息量不同且產生出來的結果也大不相同。通常文件訊息鑑別會破壞儲存資訊,藉由雙方共享的 key 來進行身分認證,可用暫時性的 key,若採用非對稱式則需要額外的數位簽章來輔助驗證發送者。而數位簽章則是提供有效期限內的使用,這把驗證的 public key 必須存在比較長的時間。
    數位簽章簽定時不知道對方怎麼簽,但能驗證是他簽的並且只有他簽得出來,文件訊息鑑別通常知道對方用什麼流程輸出一樣的數值。

類型\性質 加密類型 輸出訊息 碰撞情況 重複使用
文件訊息鑑別 普遍上對稱式 不管多長都固定長度 存在 相同輸入 - 相同輸出
數位簽章 非對稱式 視情況而定 視情況而定 相同輸入 - 可能不同輸出
Read More +

遊戲問卷設計 Game Guestionnaire

問卷設計跟面試方法一樣,如何了解使用者的需求與能力,如何發問、如何誘導都是相當有趣的。對於每一種人格特質,在面對不同問題的問法時,作答的難易度是有影響的,這對面試官也是相當重要的課題,因此需要了解到問題設計的方法。

關於問卷

問卷通常會分成兩種

  • 定量分析
    詢問回答者的意見 程度 ,通常採用二值化,在從正到反極劃分數個單位,讓使用者選擇。
  • 定性分析
    單純詢問使用者的 看法 ,在不給予任何提示下,讓使用者根據自身的經驗回答問題。

當不知道問題的答案分布,既不是好與壞兩者,那麼定量分析就不能作為評估,採用開放式作答的定性分析,讓使用者回答它們所理解的,通常開放式有一個缺點,會導致過於雜亂的回答,很難得到期望的答案。想必很多人在不理解 問題描述 就會答非所問。定量分析的面向去設計,會得不到意想不到的答案,兩種方法各有優缺。

問卷設計

按照上述的兩種情況分成 選項 申論 兩種。申論題就不必說,留給使用者提出自己的看法,欄位設計就是文字欄位而非選項欄位。

特別介紹一下選項部分,通常會有 是 / 否 喜歡 / 不喜歡 ,再複雜一點就是 非常喜歡 - 喜歡 - 沒意見 - 不喜歡 - 非常不喜歡 。如果在量表中只有偶數選項,通常是不存在中立立場,希望每個應答者都給予一個立場去回答,反之在奇數選項中,給予中立立場的應答機會,通常會得到非常多的 沒意見 此時有效問卷的數量相對少。

關於面談

面談通常會分成三種

  • 結構化
    封閉式對答,在已知答案中做決策。循序讓使用者回答問題。
  • 半結構
    相較於結構化問題,不要求詢問順序性,或者是確切的答案回答。
  • 非結構
    問題會隨著應答者回答的方式變化。

通常第三者的非結構面談相當輕鬆,如果變化問題不特別刁難,面談者也會根據應答者的能力詢問相關問題。然而在結構化問題中,相當一板一眼,容易對應答者感到緊張,當問題卡住的時候,接下來的問題就會影響到應答者的狀態。半結構化則介於兩者之間。

團體面談

  • 部分應答者很容易被忽略,需要主持人去引導,觀察每個應答者在聽取其他人回答的肢體語言,適時地將每個人的意見引出。
  • 很難獲得想要的資訊。
  • 回答之間會相互影響。

特別小心主持人不應該讓面談者們 達到共識 ,而是讓他們分享所知。誤導或誘答的情況應該避免,否則有可能會造成馬拉松領先者帶著一群人走錯方向的感覺。感覺不少情況會設下陷阱去讓面談者誤答,在問題描述上不給予明確的規範,在算法問題上也常常會這樣,至於算不算誤答就不曉得,當一個人對問題的背景認知不同時,問題本身就不一樣,能不能 取悅 面試官呢?

歸納問卷

回收問卷後,利用定性方式去得到的答案是最難分析,只能靠觀察去理解,對於定量方式去設計的,將要看採用的數學模型來決策,例如消頭去尾後得到的平均數、眾數、中位數 … 等。不管哪一種方案,要看應答者的文化習慣,是否會造成不願意表態,極端情況是否正常 … 等因素,適時地消去一些實驗數據進行統計。

問卷介面也要有所區別,通常會有數個相似領域的問題,整合在一起,並且給予一個問題大綱有助於對問題的理解,特別注意到問題設計時要確定題目是否能二極化。

各組設計

最奇葩的要來了,針對認知風格進行問卷調查,針對先前設計的遊戲,不同認知風格對遊戲介面的觀感。,各組提出的問卷問題如下:

塔防遊戲

  • 遊戲中介面的引導對你有哪些幫助?
  • 升級頁面的兵種介紹對你有何影響?
  • 過多提示會不會扼殺你對遊戲的興趣?為什麼?
  • 你覺得遊戲中哪一個功能最不直觀?為什麼?
  • 是否希望一開始就解鎖所有關卡?為什麼?
  • 無法順利通關時,你都如何應對?
  • 升級頁面的兵種能力數值是否能幫助你理解兵種特性?如果不行,希望如何改善?
  • 你覺得遊戲中哪一個功能最不直觀?為什麼?
  • 你覺得遊戲中在哪個部分自由度不夠?希望如何改善?
  • 你希望遊戲中哪些介面能夠讓你自行調整?

角色扮演

  • 你覺得主畫面看起來如何 (例如背景顏色、排版、標題等等)或是其他?
  • 你覺得說明文件的詳細度以及對於操作的說明還有排版等恰當嗎,能助你了解遊戲怎麼進行?
  • 關卡劇情有沒有讓你覺得充滿故事性、關聯性,讓你進入遊戲中?
  • 遊戲的流程、難度、還有系統的圖示資訊你覺得夠完善嗎,能幫助你遊戲順利?
  • 你覺得遊戲的音樂選擇跟切換時機有讓你覺得非常合理,並且具有強大代入感嗎?
  • 您覺得遊戲難度是否可以自行解決?為什麼

我們組所提出的七個問題如下

  • 您覺得遊戲難度是否可以自行解決?為什麼
  • 您最喜歡、討厭這遊戲哪一部分,討厭的話,想改成什麼?
  • 您覺得遊戲內介面的看法如何?
  • 您對於介面的動畫效果的看法如何?
  • 您玩完這款遊戲後,對遊戲目標瞭解程度 (例如劇情 …)?
  • AI 擬真程度對遊戲操作的感受?
  • 原本期望的效果、事物卻沒在遊戲中的是什麼?

解謎遊戲

  • 在遊戲進行當中在覺得最困難的部分為何?
  • 如果在遊戲中加入選關模式,你有什麼看法?
  • 對於遊戲介面,你認為有什麼可以改善的地方?
  • 教學關卡對你學習遊戲的操作模式有什麼影響?
  • 對於破關後才加入競速模式,你有什麼看法?
  • 你認為遊戲劇情有何改善空間?

問卷統計範例

本課程教學極為詭異,應該請全班人一起填,總共才七組來卻只要求自己去找 課程班上 十個人來填問卷,互填對方設計的遊戲問卷難道這麼困難嗎?老師應該要直接請全班來填寫吧,用鼓勵的方式,居然在畢業前一周要大家填問卷,一星期統計好並且報告,明顯地大家都在忙畢業典禮的拍照,問卷也很晚統計回來。

當然十個人的樣本數只能自我安慰,下什麼結論都是不具有信用的,只好按照老師的調調亂扯一通。就算遊戲做得再差,問卷回饋不如預期的對答,也許按照自己的預測方式去報告就行,問卷感覺就是裝飾用的。自己的教授自己靠北?

問卷結果

分別對於兩個版本,非常非常少的實驗數據。

遊戲難度 Holist 認為難度簡單,對遊戲進行不算困難,對於 Serialist 比較有新事物認知上的起手問題。

在遊戲偏好上,大部份的 Holist 看到了整體的光影效果對此深感好奇,而 Serialist 不少指出遊戲說明上的困惑與扣除血量的細節。

在遊戲內介面上,Holist 對於道具切換、使用狀態有強烈的要求,太過簡潔的界面是介意的地方,而在 Serialist 對於顏色要求較為強烈,對於簡介的介面設計滿意。

在遊戲介面動畫上,Holist 比較偏向回答遊戲內部的元素動畫,而 Serislist 則比較在意流血效果和字體閱讀。在這一部分的回答可以說是有點誤導,預期是想要讓他們回應遊戲介面動畫,而非遊戲內的元素動畫。

在遊戲目標上,一致都朝著遊戲通關目標為基準,而非劇情走向,估計是劇情走向對遊戲進行流程不影響,所以沒有必要去注意遊戲劇情內容。

在人工智慧 AI 上,Holist 比較偏向滿意,對有一些與現實邏輯不合的反應介意,對於 Serialist 對於 AI 的反應比較兩極,有好有壞。

對於預測遊戲進行上,Holist 比較想要的是局部性改變,例如效果與道具使用上、遊戲進行邏輯、新的功能利於闖關。而 Serialist 比較喜歡全局性的擴充,如新增關卡、不同類型的通過條件、關卡成就感、角色成長的需求。

課程意見

請不要一堂課的結尾就喊出成績來決定一個學生的價值,若要從認知風格中挑選一種分類,老師的認知風格屬於一種衝動型,部分是需要不斷反思來接受新的資訊。不強求這門課的走向,但從做遊戲方面,可說是此次教學的創舉,既然要我們寫程式,麻煩就以資工系的方式引導,時間跟計劃不是一兩個星期前講就了事,牽涉到設計與構思,不給一個明確的方向,導致各組面向不同種遊戲,類型不同的遊戲設計出來就不能隨意說好與壞,若是要符合你們口味的網路學習,那直接說做益智遊戲即可,有些探討問題也因遊戲類型扯不上關係。

若要用小組程式作業、設計作為不上課的理由實在說不過去,導致這一學期很多次沒上課,起碼可以一個小時上課,後兩個小時討論的方式。而在論文上台報告卻有報告老師的同一篇論文,導致報告內容重複且冗長。上課投影片請不要用講稿模式 (兩攔筆記式,另一半的筆記欄位不知道給誰看的),可以請助教弄全螢幕的投影片。

Read More +

虛擬實境 建模 SVD 筆記

由於在選讀論文時,和上課都遇到相關問題,但一直對這 SVD 的實際感觸沒很深,了解數學計算,卻不知道特性一直很困惑我。在這裡收集一下曾經學過的內容,當初在線性代數時沒有學到這一塊,至於 $LU$ 分解有沒有上到過,我自己也深感困惑,不過看一下網路資源勉強還能理解。

至於 SVD 則在線性代數非常重要,在許多領域時常會遇到,如巨量資料 (massive data)?機器學習?影像處理?就我所知理解看看吧!

SVD

定義從一般式

$$ A_{m, n} = U_{m, m} \Sigma_{m, r} V_{n, r}^T$$

得到縮減過後的相似矩陣

$$ A_{m, n} \cong U_{m, r} \Sigma_{r, r} V_{n, r}^T$$

給定 $A$ 矩陣,要變成三個矩陣相乘,可以壓縮儲存空間,一般來說都是拿來得到近似的 $A$ 矩陣,藉由刪除過小的 eigenvalue 來完成,eigenvalue 就是所謂的矩陣特徵值。

在學線性代數時,沒有仔細想過 eigenvalue 的意義所在,每一個 eigenvalue 也會對應一個 eigenvector,這些 eigenvalue 大小對應的分佈的相關性大小,而 eigenvector 則表示新的轉換軸的方向。類似最小平方法得到的結果。

但在巨量資料課程中我們可以知道一件事情,若是稀疏矩陣 $A$,經過 SVD 運作後,得到 $U, V$ 矩陣都是稠密的,因此空間儲存反而划不來,因此會有另外一種解法 CUR,可以上網搜尋 massive data mining coursera 在 這裏 可以知道關於 CUR 的資訊。

從課程中的例子來看,假設在電影評論系統中,則 A 矩陣表示電影對人的喜好度,則 SVD 相當於如下描述 (假想,單純的矩陣概念)

  • $A(i, j) $ 電影編號 i 對用戶 j 的好感度
  • $U(i, j) $ 電影編號 i 對電影屬性 j 的成分程度
  • $\Sigma(i, j) $ 電影屬性 i 跟電影屬性 j 的之間重要性。
  • $V(i, j)$ 表示用戶 i 對電影屬性 j 的偏愛程度。

也就是說有一些電影屬性不是很重要,可以移除掉,這樣的表示法得到一個近似的矩陣 $A$。

在巨量資料中一個有趣的運用,可以用在購物推薦系統中,來達到預測相關性,跟某人對其他產品的喜好程度或者是需求性,但是在處理之前會遇到矩陣過大,但又非常稀疏,為了解決紀錄問題,就有奇奇怪怪的 Dimensionality Reduction 來完成,SVD 就是其中一種方法。

其他應用部分,將不重要的特徵值消除,來求得哪些元素是需要的,看到有一篇 文章 在做 PCA 主成份分析。

$$ \begin{align} & A_{m, n} V_{n, r} = U_{m, r} \Sigma_{r, r} V_{n, r}^T V_{n, r} \\ & \because V_{n, r}^T V_{n, r} = I \\ & \therefore A_{m, n} V_{n, r} = U_{m, r} \Sigma_{r, r} \\ \end{align}$$

如此一來就可以知道要保留哪幾個主要資訊。

在虛擬實境論文中也是有這樣的處理,做的是 CT 建模,將模型的每個頂點,要計算 QEM (最小二次誤差) 的重要性,可以將其表示成一個矩陣,利用 SVD 方式得到,來決策要保留前 k 個重要性的節點,再將其他節點移除,來讓新得到節點盡可能地可以貼近真實模型。

之所以會這麼做,是要利用內插法來強迫得到邊緣偵測,但這樣會造成很多新頂點,為了要把過多頂點消除,使用 QEM 作為評價方法,利用 SVD 來完成大規模刪除的操作。

Map-Reduce

都明白 SVD 是一個很繁複的做法,有一個 $O(N^3)$ 的算法來求得所有 eigenvalue,若要用一般電腦跑,光是得到一個大矩陣所有 eigenvalue 複雜度相當高,其複雜程度沒有細讀過。有一種迭代的方法,類似馬可夫過程,每一次迭代可以逼近一個 eigenvalue,為了得到 n 個 eigenvalue,想必要迭代非常多次。運用 Map-Reduce 分散到很多台群落電腦加快矩陣乘法,這種方法的複雜度是可以期待的。

詳細操作 請參考

eigenvalue $\lambda$ 滿足

$$Av = \lambda v$$

現在開始迭代 $v$ 讓其等式趨近於穩定

$$A x_{i} = \lambda x_{i+1}$$

初始化 $x_{i} = (1, 1, ..., 1, 1)$ ,其中 $| x_{i}| = 1$ 藉由長度為 1 的向量,來求得 $\lambda$,之所以要對 $x$ 進行正規化,其一就是要求出 $\lambda$,另一個原因是要看何時穩定,當 $| x_{i} - x_{i+1}|$ 差距夠小時,則表示進入穩定狀態。

那就可以得到矩陣 $A$ 的其中一個 eigenvalue,為了求得另外一組解,得到新的 $A^* = A - \lambda x x^T$,再對 $A^*$ 找到 eigenvalue,不斷地迭代下去。

Read More +

近代加密 數位簽章 DSA 筆記

DSA

Digital Signature Standard (DSS) 數位憑證標準,而有一個 DSA 演算法來完成憑證。

每一次憑證傳送三個參數 $(r, s, M)$,利用私用金鑰進行加密。讓對方使用公鑰進行驗證。

  • $r = (g^k \mod p) \mod q$
  • $s = k^{-1}(SHA(M) + x \times r) \mod q$

give receiver $(r, s, M)$, we have random (one-time) $k$ & private key $x$

每一次簽名時,最好使用隨機亂數 $k$ 作為簽章用途,隨用即棄,若發生重複使用,將會發生被攻擊,被攻擊者拿到私鑰後,攻擊者就能進行偽裝。

Attack

if reused $ k $

如果重複使用隨機變數 $k$,可以藉由夾擊的方式得到,雖然不知道加密的隨機亂數 $k$ 究竟是什麼,藉由夾擊可以把 $k$ 消除,利用乘法反元素反求 $x$ 是多少,公式如下所述。

  • $ k = s1^{-1} (SHA(M1) + x \times r) \mod q $ - (1)
  • $ k = s2^{-1} (SHA(M2) + x \times r) \mod q $ - (2)

subtract (1) - (2)

  • $ 0 = s1^{-1} SHA(M1) - s2^{-1} SHA(M2) + (s1^{-1} - s2^{-1}) x \times r \mod q $
  • $ s1^{-1} SHA(M1) - s2^{-1} SHA(M2) = (s2^{-1} - s1^{-1}) x \times r \mod q $
  • $ x = (s1^{-1} SHA(M1) - s2^{-1} SHA(M2)) \times (s2^{-1} - s1^{-1})^{-1} \times r^{-1} \mod q $

get private key. Dangerous !

Verify

驗證的正確性與否,接收者需要計算以下四個步驟來完成驗證。

  • $ w = s^{-1} \mod q $
  • $ u1 = (SHA(M) \times w) \mod q $
  • $ u2 = r \times w \mod q $
  • $ v = g^{u1} y^{u2} \mod q $

test $ v = r $, why correct ?

理論的正確性可以參考以下證明,把公開的 $y = g^x \mod p$ 拿出來,這個安全性取決於離散對數的算法難度。

  • known $y = g^x \mod p $, $x$ is a private key
  • because $s = k^{-1}(SHA(M) + x \times r) \mod q$
  • then $k = s^{-1}(SHA(M) + x \times r) \mod q$

want $r = (g^k \mod p) \mod q$

  • $r = (g^k \mod p) \mod q = g^{s^{-1}(SHA(M) + x \times r)} \mod q$
  • $r = g^{s^{-1} SHA(M)} \times g^{x (s^{-1} \times r)} \mod q $
  • $r = g^{s^{-1} SHA(M)} \times g^{x^{(s^{-1} \times r)}} \mod q $
  • $r = g^{s^{-1} SHA(M)} \times y^{(s^{-1} \times r)} \mod q $

而我們事實上就是在處理指數部分,

離散對數

解決問題 $y = g^x \mod p$,當已知 $y, g, p$,要解出 $x$ 的難度大為提升,不像國高中學的指數計算,可以藉由 log() 運算來完成,離散對數可以的複雜度相當高,當 $p$ 是一個相當大的整數時,通常會取用到 256 bits 以上,複雜度則會在 $O(2^{100})$ 以上。

實際上有一個有趣的算法 body-step, giant-step algorithm,中文翻譯為 小步大步算法 ,在 ACM-ICPC 競賽中也可以找到一些題目來玩玩,算法的時間複雜度為 $O(\sqrt{p})$,空間複雜度也是 $O(\sqrt{p})$。相信除了這個外,還有更好的算法可以完成。

小步大步算法其實很類似塊狀表的算法,分塊處理,每一塊的大小為 $\sqrt{p}$,為了找尋答案計算其中一塊的所有資訊,每一塊就是一小步,接著就是利用數學運算,拉動數線,把這一塊往前推動 (或者反過來把目標搜尋結果相對往塊的地方推動)。因此需要走 $\sqrt{p}$ 大步完成。

Read More +

虛擬實境 考古筆記

虛擬實境這一門課可以讓你體驗有如在上另一門課的虛擬實境,前半段講生物結構,來了解軟硬體需要那些特性、效能,後半段在講視覺建模算法,牽涉到計算幾何、線性代數 … 等課程。

在幾何課程中介紹的 Delaunay triangulation 對於建模算法是相當重要,接著在多重解析度部分牽涉到傳輸跟處理速度,在資料結構的儲存上很有趣。為了加速運算效能、漸進式需求,各種轉換壓縮都會跑出來。

複習

  1. (15%)[Definition]
    詳細說明一個虛擬實境 (virtual reality) 系統需要具備那些特性,並說明一個虛擬實境系統要用到哪些軟體技術。

    提供人們能感知的動態環境,視覺、嗅覺、觸覺,並且能與環境互動中得到反饋,得到逼真感覺。需要以下幾個軟體

    1. 影像處理與繪製
    2. 物理引擎
    3. 擷取資料的整合
  2. (15%)[Human perception]
    說明人類 1. 單眼立體視覺的原理,2. 雙眼立體視覺的原理;並3. 比較其優缺點。

    1. 單眼立體視覺靠單一眼球調整焦距,將數張影像交給大腦來整合,這必須藉由對物體認知來補足。
    2. 雙眼立體視覺的原理主要靠左右兩個眼球不同的相位差,來計算立體影像的距離差距。
    3. 視野範圍以及反應時間,單眼必須藉由調整焦距來補足,雙眼可以同時獲取不同相位差的影像。
  3. (15%)[Hardware]
    說明感應手套 (sensing glove) 與力回饋手套 (force-feedback glove) 的原理,並比較他們在應用上的差別(可舉例說明)。

    感應手套是由操作者的反應傳輸給感測器,藉由手套上感應器之間的變化數據得到操作者給予的狀態。力回饋手套則是將物理特性反饋給使用者,藉由手套上的機械,施予使用者力反饋。

    感應手套為使用者操作,力反饋手套則相反由環境操作。

  4. (15%)[Modeling]
    說明五種 3D 模型的表面表示式 (surface representation),並比較這些表示式的優缺點。

    目前共計主要分成五種表示法:

    • regular square grid meshes (RSG)

    • triangulated regular meshes (TRM)

    • triangulated irregular networks (TINs)

    • polygon meshes

    • parametric patches

      RSG 建造簡單,但會有四點不共平面,影響到貼圖繪製上的問題。TRM 解決四點不共平面問題,但與 RSG 問題無法凸顯邊緣。TINs 解決無法凸顯邊緣問題,但需要經過最佳化算法來得到不規則三角網格,儲存方式必須記錄所有的點座標,由於要經過最佳化算法,處理速度會慢上很多。動態更動座標的效果較差。polygon meshes 建造相對困難,多邊形的最小單位是三角形,頂點儲存量比 TINs 少很多,parametric patches 藉由取樣點套入參數,讓表面接近平滑,針對部分訊息的改造,平滑效果造成的反饋比較逼真。

  5. (15%)[Multiresolution modeling]
    說明並比較以小波轉換為基礎的多重解析度模塑 (wavelet-based multiresolution modeling) 技術與 Lindstrom 等人的對稱三角網格 (symmetric triangulated networks) 多重解析度模塑技術的原理及優缺點。

    • wavelet-based multiresolution modeling
      解析度資料量與面積成正比,考慮到與觀察者之間的距離,用另外三張影響轉換到更高解析度,每一次解析度增加兩倍。
    • symmetric triangulated networks
      考慮到地形高地、平坦性對於觀察者的影響,投影到使用者的平面,判斷是否差異過大需要提供更高解析,解析度資料量所需節點數成正比

      相較之下,小波轉換給予的傳輸資料反應會比較慢,同時也會在使用者感受不到差異的地方提供更高解析度,很容易浪費資源,對稱三角網格在資料鏈結會複雜許多,沒有小波轉換的儲存架構來得容易理解,但對稱三角網格反應速度快,支持快速的解析度變換。

  6. (15%)[Multiresolution modeling]
    說明漸進網格 (progressive mesh) 多重解析度模塑與二次誤差 (quadric-error-metric) 多重解析度模塑的相同與差異處,並比較兩者的優缺點。

    漸進網格藉由拔點、縮邊,提供不同解析度,依序拔點,考慮四個因素來決策拔點順序,這四個因素分別為影響到其他點之間的距離、縮邊的長度總和、頂點材質的差異、對邊界影響程度。

    考慮的是從精細模型轉換到粗糙模型的差異變化,挑選變成粗糙的影響最小的先拔除,這樣的計算量會比較大,拔除一點後,鄰近的點的誤差值計算也要跟著重新計算。

    二次誤差類似漸進網格的方式進行拔點縮點,但縮邊完的的結果不會只有三種可能,縮到兩端點的其中一個、或者是中點,提供一個數學計算來找到縮到哪一個地方更好。

    二次誤差考慮的是從端點誤差值得相加,並且產生一個新的頂點,有點霍夫曼編碼的意味在。計算從粗糙模型上的點到精細模型平面的距離平方,與之前的模型 (Progressive mesh - Hoppe) 恰恰相反,並不是考慮精細模型上的點到粗糙模型平面的距離平方。因此對於 QEM 的誤差可以累加。問題是粗糙模型上的頂點是無法得知,屬於未知數,用內插法。QEM 誤差精確度只是約略,速度快但品質沒有 Progressive mesh 來得好。

  1. (15%)[Multiresolution modeling]
    說明 (a) 動態載入 (dynamic loading) 的意義。(b) 動態載入與多重解析度模塑技術整合會產生什麼問題。(c)解決上述問題的三種方法。

    動態載入為在記憶體不足時,將部分資料存放在磁碟中,當程式運行到需要那些資料進行運算時再從磁碟中讀取,這樣的過程稱為動態載入。

    動態載入對於多重解析度塑模來說,主要是記憶體問題以及所需要的解析度跟數據大小關係,解析度度越高,所需要的資料量越多。但是畫面呈現的解析度不一下,要怎麼進行資料讀取,動態載入的數據結構定義則需要特別設計,例如是要 response time 最小、計算複雜度最低,讀取數量最小 … 等。

    假設需要不同解析度可以靠 Discrete layered multiresolution models,每一種解析度彼此獨立儲存,這樣的方法可以提供基礎的不同解析度,但讀取時間相對長,儲存在磁碟的空間需求大,效果呈現是最快的,但是離散結果會有不連續的解析度變化。

    為了解決解析度連續變化問題,可以使用 progressive mesh 來達到,提供以點、線與解析度呈現線性變化。

    若需要不同解析度,可以利用 hierarchical models 來完成畫面中每一處的解析度不同,這是一種資料結構,當需要更高解析度時,則走訪更深的樹節點來印出所需要的畫面。

    評價效果好壞利用 Delaunay triangulation 計算平滑程度。

  2. (15%)[Rendering]
    說明shading的意義,敘述 Gouraud shading 與 Phong shading 的作法,最後比較他們的優缺點。

Read More +

遊戲介面設計及效果 Game UI & Effect

前言

上次沒有好好地將遊戲內容進行擷取說明,單純對介面設計原則做說明,介面設計會根據裝置操作有所不同吧,那遊戲介面是否又能如此?

要把法則呈現在遊戲中又是另一回事,畢竟遊戲跟網頁又有點差別,當然也有人認為認知風格跟遊戲性不相干,倒不如說會跟遊戲內容有關,遊戲內容決定介面設計方向,若要根據認知風格設計,想必會是一道難題。

遊戲內容的多寡將決定運行的流程、架構,遊戲介面越簡潔越好,最後的演化就是什麼 都沒有最好 ,除非有人喜歡儀表板,那就另當別論。隨著遊戲必要才出現的介面,會導致程式撰寫相當麻煩,要用排除法來防止奇葩的流程走向。

不僅介面擺設需要考量,還要有觸發時間、方法,以及浮現效果,這些會影響到使用者是否知道可以使用,大部分的介面以文字為主,那串接效果影響不大。為了提升使用者體驗,最好是使用圖示為主,但這會造成跟背景融合的一體感,可能會造成無法被使用者察覺可觸發,必須在圖示效果加點功夫。

就像虛擬實境課程內容所提及的漸進式效果會比較好,對於使用者有如虛擬實境,也就是說介面出現的時間跟方法不能太過迅速。關於上虛擬實境課程的那些小事,有如在上影像處理課程的虛擬實境呢。

以上內容,僅本人觀察。

Github

如果圖片看不到,請至 Github 中的 doc 目錄下查閱本篇附圖。

遊戲執行檔和開源代碼都在其中,當然還有遊戲的編輯器。更多的遊戲截圖在裡頭,只支持 windows 平台。

Animate

Info Demo
Menu Enter/Select Menu
Button Enter Menu
Popup Menu Menu
Menu Focus Menu
Lighting Menu
Fog Menu
Use Props Menu
Caption Menu

Screenshot

選單使用方向鍵和滑鼠點擊操控,同時提供大綱說明。

Info Demo
How to Play Menu1
Story Menu2
Test Room Menu3
Achievement Menu4
Options Menu4

Tutorial Design

使用教學關卡,步入遊戲元素與操作。

Info Demo
Tutorial Tutorial

Game UI Design

遊戲介面細節設計

Info Demo
Tip Tip
Control Information Information
Exit Warning Information
Props View 1 (Scroll up) Letter
Props View 2 (Scroll down) Letter
Level Complete Clear
Level Fail Fail

Game Element

遊戲元素效果

Info Demo
Hide Hide
Use Use
Test Room Test

Option Design

遊戲配置設計

Info Demo
Sound Sound
Difficult Difficult

Story Design

過場 (eyecatch) 劇情的介面設計

Info Demo
Story Story
Story branch 1 Story
Story branch 2 Story branch

Other Mode

遊戲模式設計

Info Demo
Time Mode 1 (Time Count) Time
Time Mode 2 (Time Up) Time
Time Mode 3 (Time Over) Time

Feature

考量的設計並沒全部去實作,提供設計參考。

Info Demo
Old 1 Old 1
Old 2 Old 2
X-Box X-Box
Andriod Android
Hexagon Hexagon
Overview 1 Overview 1
Overview 2 Overview 2

Game Layout

Info Demo
Origin Origin
Clear Clear
Icon With props 1 Icon
Icon With props 2 Icon
Exit Menu Exit Menu

Option Setting

Info Demo
Keyboard 1 Keyboard 1
Keyboard 2 Keyboard 2

Over Layout

Info Demo
Popup popup

Game Flow

Info Demo
With Over over
With Eyecatch eyecatch

Game Caption

Info Demo
Balloon balloon
Read More +

資訊安全 小考 2 筆記

筆記錯誤多多,請以僅供參考的角度去質疑

Problem

  1. Below is a key distribution protocol.
    (a) Please describe the details of “replay attack” when $N_1$ is removed from the protocol.
    (b) Please modify the protocol to enable party A to confirm that party B already received $K_s$?

  2. Please explain link encryption and end-to-end encryption.

  3. (a) Please describe details of the Fermat’s theorem (or called Fermat’s little theorem).
    (b) How to compute the multiplicative inverse of an integer $a$ modulo $p$ based on the Fermat’s theorem?
    (c) What is the requirement for $a^{-1}$ to exist?

  4. (a) Please describe details of the Euler’s theorem.
    (b) Based on this theorem, please describe the basic idea of the RSA encryption and decryption process.

  5. The Miller-Rabin algorithm is used to test whether an odd integer n is a
    prime. Please complete the following missing steps of teh algorithm. (15%)
    (1) Find integers $k, q$ ($k$ > 0, $q$ odd), so that $(n - 1)$ = __________
    (2) Select a random integer $a$, $1 < a < n - 1$
    (3) if (_______) then return (“maybe prime”)
    (4) for $j = 0$ to $k - 1$ do
    (5) if (_________) then return (“maybe prime”)
    (6) return (“composite”)

  6. Please describe details of the Chinese remainder theorem for the case of $n = p \times q$ where both $p$ and $q$ are primes. (Your anseer should include how to transform an ordinary domain integer $A$ to the CRT domain, and the CRT formula used to inverse-transform the CRT domain representation back to the ordinary domain integer).

Notes

Part 1

基礎步驟如下

1
2
3
4
5
(1) A -> KDC : IDA || IDB || N1
(2) KDC -> A : E(Ka, [Ks || IDA || IDB || N1]) || E(Kb, [Ks || IDA])
(3) A -> B : E(Kb, [Ks || IDA])
(4) B -> A : E(Ks, N2)
(5) A -> B : E(Ks, f(N2))

如果沒有 $N_1$,紀錄 IDA || IDB、E(Ka, [Ks || IDA || IDB]) || E(Kb, [Ks || IDA]),就能假冒 KDC 讓 A 用固定的 $K_s$ 去跟 B 連線。再藉由已知明文,就能知道雙方的溝通內容,進行竊聽。

為了讓 A 知道 B 擁有 $K_s$ 修改其中兩個步驟

1
2
modify (3) E(Kb, [Ks || IDA]) || Nx
(4) E(Ks, N2 || Nx)

Part 2

  • link encryption 屬於 router 之間的通訊,屬於低階網路層協定,在每一條連輸線路各自獨立的加解密,會修改訊息 header,可以增加 padding,保護流量偵測。
  • end-to-end encryption 屬於原點、目的地之間的加密,它們共同享有一把 shared key,屬於高階網路層協定,用來保護資料安全,訊息 header 保留給傳輸用。

Part 3

Fermat’s theorem :

$$ a^{p-1} \equiv 1 (\text{mod } p) $$

為了要求 $x^{-1}$,則利用費馬小定理 $x^{p-2} \times x \equiv 1 (\text{mod } p)$,因此 $x^{-1} \equiv x^{p-2} (\text{mod }p)$,特別小心 $p$ 一定要是質數,且滿足 $gcd(x, p) = 1$。

Part 4

Euler’s theorem

$$ a^{\phi(n)} \equiv 1 (\text{mod } n) \text{ , }gcd(a, n) = 1 $$

先來複習一下 RSA 算法的產生與加解密

  1. select two large primes $p$ and $q$ at random.
  2. Let $N = p \times q$, $\phi(N) = (p-1)(q-1)$
  3. select (at random or fixed) the encryption key $e$
    where $1 < e < \phi(N)$, $gcd(e,\phi(N))=1$
    so, $e^{-1} \mod \phi(N)$ exists
  4. solve following equation to find decryption key $d = e^{-1}$, $e \times d \mod \phi(N)=1$
  5. publish public/encryption key: $KP = \left \{ e,N \right \}$
  6. keep secret private/decryption key: $KS = \left \{ d, p, q \right \}$

encrypt a message $M$ the sender:

  • obtains public key of recipient $KP = \left \{ e,N \right \}$
  • computes: $C = M^e \mod N$

decryption a ciphertext $C$

  • uses his private key $KS = \left \{ d, p, q \right \}$
  • computes: $M = C^d \mod N$

用來加解密,為什麼會是正確的呢?

$$\begin{align} & M \equiv (M^e)^d \mod N \\ & M \equiv M^{ed} \mod N \\ & \because ed \equiv 1 \mod \phi(N) \text{ and Euler's theorem} \\ & \therefore M \equiv M^{ed \mod \phi(N)} \mod N \\ & M \equiv M^{1} \mod N \end{align}$$

這裡很神祕,假設 $n = 21$,則 $phi(n) = 12$,根據歐拉公式 $3^{12} \equiv 15 \mod 21$ 違反歐拉定理,但是在 ACM-ICPC 競賽中,有一點明白到,$a^i$ 在 $\mod n$ 下的餘數循環節長度 L,則滿足 $L | phi(n)$,藉由這一點來正確解密,至於到底算不算利用歐拉定理仍是個有趣問題。

Part 5

1
2
3
(1) 2^k q
(3) a^q == 1 mod n
(5) a^(2^j q) == n-1 mod n

Part 6

雖然題目要求得不多,這裡直接拿 RSA 作範例

  1. $N = p \times q$

  2. 目標計算 $M = C^d \mod N $
    分開計算得到兩個部分,這裡可以利用歐拉定理加快,因此 $d$ 可以先 $\mod \phi(p)$
    $Mp = C^d \mod p$
    $Mq = C^d \mod q$

  3. 套用中國餘式定理 CRT,簡單的模型如下:
    $a_i = M \mod m_i$
    $M = a_1 c_1 + a_2 c_2 + \text{ … } $
    $Mi = m_1 \times m_2 … \times m_n / m_i$
    $c_i = M_i \times (M_i^{-1}) \mod m_i$

  4. 因此 RSA 可以預先處理 $c_p = q \times (q^{-1} \mod p)$ 和 $c_q = p \times (p^{-1} \mod q)$,還原的算法則是 $M = Mp \times c_p + Mq \times c_q \mod N$

結論,由於拆分後的 bit length 少一半,乘法速度快 4 倍,快速冪次方快 2 倍 (次方的 bit length 少一半),但是要算 2 次,最後共計快 4 倍。CPU 的乘法想必不會用快速傅立葉 FFT 來達到乘法速度為 $O(n \log n)$

但是利用 CRT 計算容易受到硬體上攻擊,因為會造成 $p, q$ 在分解過程中獨立出現,當初利用 $N$ 很難被分解的特性來達到資訊安全,但是卻因為加速把 $p, q$ 存放道不同時刻的暫存器中。

其中一種攻擊,計算得到 $M = Mp \times q \times (q^{-1} \mod p) + Mq \times p \times (p^{-1} \mod q) \mod N$ 當擾亂後面的式子 (提供不穩定的計算結果)。得到 $M’ = Mp \times q \times (q^{-1} \mod p) + (Mq + \Delta) \times p \times (p^{-1} \mod q) \mod N$

接著 $(M’ - M) = (\Delta’ \times p) \mod N $,若要求 $p$ 的方法為 $gcd(M’ - M, N) = gcd(\Delta’ \times p, N) = p$,輾轉相除的概念呼之欲出,原來 $p$ 會被這麼夾出,當得到兩個 $p, q$,RSA 算法就會被破解。

Read More +

認知風格 設計篇

接續上一篇

調整方法

調適能力 (Adaptivity) 與調適性 (Adaptability)。前者能依據使用者的互動 (interaction) 自動修改應用程式的行為,後者則是依照預先定義好的選項來改變應用程式的行為。

網頁設計類型 優點 缺點
Adaptivity 迅速地貼近使用者,使用者不必做過多設定 由於自動變化,對於使用者教學會相當困難
Adaptability 客製化過程有參與感,可以更了解系統功能 入門困難,適應介面到可以客製的過程長

介面初步

1
2
3
4
5
6
7
8
9
10
test version
______ ______ ______ __ __
/\ == \ /\ __ \ /\ __ \ /\ \/ /
\ \ __< \ \ \/\ \ \ \ \/\ \ \ \ _"-.
\ \_____\ \ \_____\ \ \_____\ \ \_\ \_\
\/_____/ \/_____/ \/_____/ \/_/\/_/
+-------------------------------------+ +--------+
| type you want | |Find it!|
+-------------------------------------+ +--------+

從最基礎的設計中,明顯地會需要一個輸入框與觸發的按鈕。但是搜尋條件有幾種,從 作者 本文 標題 出版期刊 … 等,這些要怎麼設計才好?

《大神落伍了?這些搜索引擎比 Google 精確還更有趣》 這裡提到專門的搜尋引擎,可以針對音樂、圖片、社群、找人 … 等內容進行搜尋。他們是怎麼完成的?

介面二步

1
2
3
4
5
6
7
8
9
10
test version
______ ______ ______ __ __
/\ == \ /\ __ \ /\ __ \ /\ \/ /
\ \ __< \ \ \/\ \ \ \ \/\ \ \ \ _"-.
\ \_____\ \ \_____\ \ \_____\ \ \_\ \_\
\/_____/ \/_____/ \/_____/ \/_/\/_/
+-----------+ +--------+ +-------+ +--------+
| BOOK NAME | | AUTHOR | | WHERE | |Find it!|
+-----------+ +--------+ +-------+ +--------+

這裡的設計多了三個欄位,有些欄位可填、可不填,進行分開的搜尋。然而會不會發生有人誤填一些資訊,誤把人名當書名,造成搜尋結果不好。為了考量這些,基本上都是在搜尋結果中做一個排序,排序的優先權可能先按照書名、作者、地點。搜尋方式的比例差異通常呈現普遍性。

為了加速篩選結果,通常會先抓書名,如果書名不夠具有特色,則會嘗試抓作者名稱,如果作者出版很多本書,則會考慮出版時間、內容。能按照內容進行搜索的引擎,肯定規模很大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
______ ______ ______ __ __
/\ == \ /\ __ \ /\ __ \ /\ \/ /
\ \ __< \ \ \/\ \ \ \ \/\ \ \ \ _"-.
\ \_____\ \ \_____\ \ \_____\ \ \_\ \_\
\/_____/ \/_____/ \/_____/ \/_/\/_/
+-----------+ +--------+ +-------+ +--------+
| BOOK NAME | | AUTHOR | | WHERE | |Find it!|
+-----------+ +--------+ +-------+ +--------+
+---------------+---------------+---------------------+
| BOOK NAME | AUTHOR | WHERE |
+---------------+---------------+---------------------+
+---------------+
| TITLE |
+---------------+
| SUBTITLE |
+---------------+
| CHAPTER |
+---------------+
| NICKNAME |
+---------------+
| PROLOGUE |
+---------------+

有一種方式是提供搜尋條件的細節,來增加使用者的搜尋效率。上面就是一個範例,不僅僅只是官方書名提供搜索,細節劃分也是相當重要。甚至有人會將書給予暱稱,例如書的名稱太普通,卻以某種封裝、寫法出名,那麼這些書的名稱可能就比較特別。

對於場依賴的而言,看得到的搜尋介面相當重要,它們比較容易根據環境提供的條件,因此設計效能上影響很多。反過來看看場獨立的人,對於這個介面操作可能會將自己的想法投入,這些想法可能來自於自身或者是之前學習過的知識。

1
2
3
4
5
6
7
8
9
10
argument version
______ ______ ______ __ __
/\ == \ /\ __ \ /\ __ \ /\ \/ /
\ \ __< \ \ \/\ \ \ \ \/\ \ \ \ _"-.
\ \_____\ \ \_____\ \ \_____\ \ \_\ \_\
\/_____/ \/_____/ \/_____/ \/_/\/_/
+-------------------------------------+ +--------+
| learning in 23 days type:reference | |Find it!|
+-------------------------------------+ +--------+

對於隱藏式的操作想必也是相當上手。但這種使用需要教學,不是相當方便。可以由簡到繁地引領使用者,例如說第一次搜尋操作後,自動填充,提示使用者下一次搜尋的方法。

1
2
3
+-------------------------------------+ *--------*
| learning in 23 days | |Find it!| <--- click
+-------------------------------------+ *--------*

得到結果後

1
2
3
4
5
6
7
8
9
+-------------------------------------+ +--------+
| learning in 23 days type:reference | |Find it!|
+-------------------------------------+ +--------+
----------------------------------------------------------------------
Find result with ...
* learning in 23 days, author:Alice, type:reference
detail ...
* ...

現在的設計大多都是由 簡到繁 的方式,從蘋果軟體中都可以發現到這些特徵,將不常用的功能都先藏在特定的地方,先基礎地提供最低需求,當使用者發現結果越來越不好時,主動地去察覺要怎麼使用更複雜的操作。

介面三步

當然有些人搜尋的結果,會根據場依賴、場獨立來查閱,場依賴偏向是由觀眾評分、評論來判定是否找到正確的書,場獨立純文本內容為主。著重的觀點不同,為了成功銷售所有的書籍,顯示的方法如下兩種參考。

1
2
3
4
5
6
7
----------------------------------------------------------------------
Find result with ...
* Learning in 23 days, author:Alice, type:reference
detail ...
* WTF Learning, author:Blob
detail ..
1
2
3
4
5
6
7
8
----------------------------------------------------------------------
Find result with ...
* [HOT] STAR: 5, learning in 23 days, author:Alice, type:reference
detail ...
* STAR: 3, WTF Learning, author:Blob
detail ..
* ...

以上示範的是場獨立、依賴的兩種。當然上面的設計屬於階層式、也有水平擺放訊息的方式。其實還有很多種的!

1
2
3
4
* 1 TITLE AUTHOR
* 1.1 DETAIL
* 1.2 DETAIL
* 1.2.1 DETAIL
1
2
3
4
5
6
7
8
+-------+ +------------------------------------------+
| | | TITLE |
| | +------------------------------------------+
| COVER |
| | +------------------------------------------+
| | | AUTHOR, DETAIL |
| | | |
+-------+ +------------------------------------------+

如果找書不根據任何別人推坑的想法,階層式會是很好的細節來決策,嘗試把每一本書的概要都仔細讀過,階層式很吃 優先權順序 ,設計起來相當挑戰。

如果是下方的方式,比較偏向大致上已經在事前知道要買哪本書,有了大概目標。這樣的設計方式方便跳躍性的搜索,因為階層式會 改變高度 ,檢索時的位移量不同會造成操作時間會比較久,但是下方的那種方式屬於固定位移量。

至於對色彩學的配色部分,又分單色、雙色欄位,來加快視窗滑動的對齊。而每一個欄位的文字色彩也相當講究,用色數量越多,看起來越五花八門,面向的使用族群也越多。為了讓使用者有 貼切感 (服務的專一性),通常用色不大於三種。

回頭調整

Adaptivity 提供系統自動調整變化,最好提醒使用者可以切換回去舊的介面設計,否則多個使用者在現實中交談時,可能會發生矛盾的錯亂交流。

Adaptability 提供使用者自定義,這些功能從系統中抽離出來,對於開發者來說是件好事,讓所有功能盡可能地讓特定使用者使用,但普遍性來說,大多數的功能都會被忽略,甚至當作從來沒有過。

Adaptability 類型的網頁設計,提供高度穩定性、客製化,有利於長時間的網站經營,培養長遠的顧客為主,對於短期入門的新手而言,對於客製化的吃力程度不一,當尚未熟悉系統前,對於功能設定處於一知半解狀態,需要閱讀文檔或累積經驗。因此在使用前期效率並不高,有待一段時間後,使用效率就有機會突破 Adaptivity 類型的。

正因為使用時間的長短,Adaptability 比較適合高頻率使用的軟體,而且功能性很強。相較於 Adaptivity 給予功能性較低,但操作起來會比較耗時 (滑鼠移動、滾動) 的軟體。

Reference

Evaluation of a personalized digital library based on cognitive styles: Adaptivity vs. adaptability

課程需求才看得,雖然我對裡面的實驗方法一點也不認同,很多地方沒有考慮進去,實驗的順序性有考慮到,卻沒有去考慮適應面向的主體,拿幾次任務的時間來進行比較往往是不夠的,根據時間成長的效率比較也應該被提出。

課程公告

由於明天的課程有多數同學因畢業旅行而無法前來上課,因此明天上課的方式將不在課堂上進行,而改為同學閱讀所附的 paper,並找時間與組員討論所附的問題

請容許我罵一聲!我擦!為什麼不上課!雖然老師上課的認知風格與我不同,無法好好地學習知識,在盡可能地去適應,卻不斷地減少上課次數,學期結束前都還沒有適應吧。

Read More +

認知風格 找你所好

前言

曾想過明明有資源,卻怎麼樣都學不好嗎?在一個群體中學習,偏偏是落單的那一個人嗎?最近上課講到認知風格的相關內容,又對學習上有所障礙,到底是哪裡出了問題?

本文

如果一名學生的認知風格與教師類似,這個學生就會有更積極的學習經歷,學習將會改善。
隊員如果擁有 類似認知風格 ,將會使他們對於參與有更 積極 的感受。而認知風格的匹配將使參與者與人共事時感覺更為 舒適 ,雖然它並不能獨自保證取得勝利的結果。

明明身處同一個環境下,成長幅度卻來得比別人低,沒錯!學習上完全沒有共鳴,導致學起來相當痛苦,建造、聚集知識的方式不同,兩路不相逢,要如何引領另一個走向相同目標?

在思考知識、經驗傳播問題前,先來認識自己,當然以前人所提供的分類方法,既不是唯一也不能二值劃分,必然有人有於兩邊優缺點,呈現自然分布,很少人是相當極端的特例!

接下來要胡言亂語囉!不用擔心!只是學習的過程不同,不代表能力的侷限。

認知風格

Wholist-Analytic

看待一個事物時,採用策略的認知方法 (從舊有事物著手,了解處理事物之間的關聯)。來看看是怎麼 吸收 管理 新訊息。

Field Dependence & Independence

美國心理學家威特金 (Witkin) 在 1940 年代研究垂直知覺時首先發現的。強調認知的過程而非內容。

  • Field Dependence 場依賴
    偏向利用環境訊息來了解事物。
  • Field Independence 場獨立
    不依賴外界資訊,由個體的方式去理解。

場獨立自主、改造能力高,對於社會技能低。相反地,場依賴則在社會技能高,對於自主、改造能力低。當然從成長過程、性別差異,會逐漸地特化、轉變成另一類,並非完全由天生決定。

一種宅宅的既視感,不外乎差別就是願不願意聽外界,當個固執的聰明人還是頑固的蠢蛋,靠著外界成長就能成為現充,當個活在社會的人。場獨立則相當危險似的,若不是聰明的那一群,很容易被誤解、淘汰於社會中。 社會究竟是何物呢?

Leveller & Sharpener

赫爾茲曼 (K.Holzman) 和克萊因 (Klein, 1954) 使用 水平 - 尖銳 認知型來描述認知風格的另一維度。

  • Leveller 水平
    利用舊有資料產生關聯,並且加入新資料進去,但這樣做容易發生混淆,關聯的下場不保證能夠邏輯地去理解,相當於把多個物品放在同一處,「 他們應該是相似的 」的感覺,甚至有時還會因為擺滿物品而捨棄。一種以增加代替修改的 持久化算法 呢!
  • Sharpener 尖銳
    相對於水平,會想盡辦法 取代 掉舊有資料,把相似之處抓出來後,放大物品差異再放回去架子上,減少混淆的情況。但對於相似之處會被移除,聯想某個物品時,只會看到最後擺放的位置,回答問題只會去描述極端的差異?操作起來一定相當耗時,放大差異去分析處理,想必會很慢。

接下來分析行為上,有一種傾向。Leveller 運行 self-inwardness 模式,避免主動參與活動,對於指導、相助有迫切的需要,傾向於 自我貶抑 的性格。Sharpener 運行 self-outwardness 模式,相較於 Leveller 更喜歡 競爭 自我展現 ,對於成就有高度的需求,常常會逼迫自己推進。

看起來,Leveller 只是因為有 Sharpener 的人存在,才會偏向自我貶抑吧!而 Sharpener 擺明就是一個抖 M 推進器。

Impulsivity & Reflectivity

由卡根 (J.Kagan, 1964) 及同事提出來的,指在不確定條件下個體作出決定速度上的差異。

  • Impulsivity 衝動
    快速地成形自己的看法,對於問題可以很快速地回答,有迫切做出決定的慾望。
  • Reflectivity 反思
    相反地,不斷地反思自己看法,考量所有可能性才能回答問題,並且設想所有評估所有答案的優缺。

這兩種在整體性的工作上沒有任何差異,但反思型學習速度比較慢。

Diverging & Converging

由吉爾福特 (Guilford, 1967) 在介紹智力模型時提出的。

  • Diverging 發散
    回答問題時,答案允許多個,接受多種解決方案,強調多樣性、創造性。
  • Converging 收斂
    強調找到一種明確的正確答案。

只有一種答案不是很無趣嗎?對於我而言,越是要求那麼唯一,就越不是答案,也許是因為找不到唯一的答案吧,才去接受多種選項的可能性。

Holist & Serialist

由帕斯克 (G.Pask, 1972) 和司科特 (Scott) 提出的。

  • Holist 整體
    大規模搜索資料,進行較大的特徵假設,嘗試去找到一個模式、關係來理解。
  • Serialist 序列
    單一方向、單一步驟來完成理解,對於細節較為著重,不在意整體的連接關係。

序列導向的人肯定對於讀書這類的序列資料很感興趣,也比較能一頁一頁的讀完,對於整體導向的人而言,常常會跳躍章節去讀,才會逐漸深入理解。

序列導向通常面臨的是細節著重,而無法看到整體概念,整體導向則由整體概念來理解,而缺少細節的驗證。從具有遠見的程度來看,整體導向會比序列導向來得高,正因為不清楚,才有廣闊的視野吧!

Verbaliser-Imager

心理學家 Paivio (1974) 提出了長時記憶信息如何被加工存儲的理論。影像儲存還是文字儲存?有一種原始影像資料和壓縮過後的大綱儲存差別,語言系統一改,壓縮而成的文字內容會造成理解錯誤吧?

Verbaliser & Imager

Riding 和 Taylor 最初提出的。

  • Imager 形象
    傾向於以視覺表象的形式思維的人被稱為形象型的人。
  • Verbaliser 言語
    傾向於以詞的形式思維的人被稱為言語型的人。

根據許多研究,當學習材料不匹配時,得到的成績往往不理想。而在人格性質上,往往言語型偏向外向、形象型偏向內向。等等,好像明白為什麼語言類型的科目會比較難學,因為很難形象化,導致只有言語型的人可以在這一方面學習得不錯。

Reference

Read More +