野村総研のインターンで学んだホワイトハッカーの世界:CTF競技の全貌

イントロダクション

こんにちは、高矢空です。このブログでは、野村総合研究所でのインターンを経験し、CTF(Capture The Flag)競技に挑戦した体験を通じて、ハッキング技術の魅力と学びを解き明かします。

トピック1: CTF競技とは?

CTFは、サイバーセキュリティの知識を競う競技です。参加者は様々なセキュリティ問題を解決し、”フラグ”をキャプチャすることでポイントを獲得します。

トピック2: 野村総研のインターン体験談

野村総合研究所でのインターン中に、実際のセキュリティ問題を解決するためにCTF競技に参加しました。この経験から、実際のハッキング技術やセキュリティ対策に関する深い理解を得ることができました。

トピック3: CTFで用いられる技術やツール

CTFでは、Web、Pwn、Cryptoの3つのジャンルが主に取り上げられます。各ジャンルで用いられる代表的なツールや技術について解説し、それらがどのように問題解決に役立つのかを具体例を交えて説明します。例えば、Web問題ではBurp Suite、Pwn問題ではpwntools、Crypto問題ではPyCryptodomeが重宝されます。

追加トピック: Pierre RSA問題の解説

“Pierre RSA”は中級レベルの問題で、RSA暗号の素因数分解を通じてフラグを取得することが目標です。この問題は、非常に近い値の素数を用いたRSA暗号に対して、Fermat法による素因数分解が有効であることを示しています。Fermat法は、2つの素数の差が小さい場合に特に有効な素因数分解手法であり、この問題では素数の選択方法に基づいて効率的にフラグを取得することができます。これらを踏まえた実際のソルバは下記の通りになります。

from Crypto.Util.number import *

def isqrt(n):
    x = n
    y = (x + 1) // 2
    while y < x:
        x = y
        y = (x + n//x) // 2
    return x

def is_square(n):
    if not n % 48 in (0, 1, 4, 9, 16, 25, 33, 36):
        return False

    x = isqrt(n)
    return x*x == n

def fermat(n):
    a = isqrt(n)
    b2 = a*a - n
    while not is_square(b2):
        a += 1
        b2 = a*a - n
    return a - isqrt(b2)

n = 10426576773612274647067389925455109509132862215911238608576203852994604761934801558857172286429251303798837666070875074724354647947851893458938767849315867399418630233335010053102170716372214973904912974662522542943989612146455168587955464250592166698475005663786816042923104087501090408757156978976465231951896175623122335004687837395777110805984976103490931003566794766111281627236847432088368956819086582777988472622029453812652416952987687085077139649625479865755027042664643393078763970794864122868707071316710371449216933164141256404432181853230450008306159998768963770683343435629291142677801716298763845543979
e = 65537
c = 9606106073938478416651781779978259756304289047861098285750406412272051973395440176615673576008128740382377888646441482161224116508979184435816613226674619777033063162320703806742496555200923066828474912054310128531540029858542597362417105073389488788562081831011504945182067331846647685549894525679835463234104436402814322068360480734642181898182381327846146579304415749865459763754446889025578704625118641511820699015846172890818884411837104772734476386852841316410657371615796952458303719909400199114135371872826072011113541973562543035511855001585813275941686499397605663520315873289997385996590514051816009981085

p = fermat(n)
q = n // p
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
flag = pow(c, d, n)
print(long_to_bytes(flag))

 

トピック4: CTFを通じて学んだこと

CTF競技を通じて、高矢空さんは論理的思考力、問題解決能力、そして最新のセキュリティ技術に関する知識を深めました。これらのスキルは、将来のキャリアにおいて非常に価値があります。

コンクルージョン

CTFは、セキュリティに関心のある人々にとって非常に有益な学習機会を提供します。今回の野村総合研究所のインターンでは、技術的なスキルだけでなく、論理的思考や問題解決能力の重要性も再認識できました。興味がある方はぜひ、CTFに挑戦してみてください。

Your email address will not be published. Required fields are marked *

*