Back to Blog

Solanaエコシステムを安全にする(5)—マルチシグ

April 10, 2022
5 min read

0. レビュー

1. 概要

前回のブログでは、Solanaプログラムにおけるアクセス制御の重要な要素であるアカウント検証について議論しました。しかし、分散型DAppや秘密鍵漏洩のリスク保護のためには、マルチシグが非常に重要です。本稿では、マルチシグの実装について紹介します。

2. マルチシグの概念

マルチシグは、複数のユーザーが単一のトランザクションに署名できるデジタル署名スキームです。トランザクションは、特権関数(例:ミント)の呼び出しや、資金移動の指示など、様々なものになり得ます。マルチシグの仕組みは、n個の当事者がそれぞれの秘密鍵を持っており、トランザクションを実行するには少なくともm個の秘密鍵による署名が必要となることです。これにより、DeFiの資金をより安全に保つことができ、秘密鍵の漏洩やラグプルなどの潜在的なリスクから保護することができます。

3. マルチシグの利用方法

Solanaには、Serumによるマルチシグプログラムがあり、これはOpenZeppelinによって開発されたマルチシグのロジックと非常に似ています。これにより、複数のユーザーが完全にオンチェーンでトランザクションに署名することができます。しかし、必要な署名をすべてオフチェーンで収集できる場合は、プロセスがより簡単になります。これを説明するために、前回の投稿のテストコードにマルチシグ機能を追加しました。すべてのテストコードはこちらで見ることができます。

3.1 コードレビュー

前回紹介したプロジェクトでは、configアカウントの管理者(admin)をmultisigアカウントに置き換えました。この場合、LockおよびUnlock命令を実行するには、クライアントはトランザクションに必要な有効なオーナーの署名を十分に含める必要があります。

Multisigという名前の構造体を追加し、4つの属性を持たせました。これらは、命令実行に必要な署名数、有効な署名者の総数、アカウントの状態(初期化されているか否か)、および有効な署名者の公開鍵の配列です。

対応するように、instruction.rsにもInitializeMultisig命令を追加しました。クライアント側から引数mu8)を受け取ることに注意してください。この値はInitializeMultisig()関数に渡されます。

InitializeMultisig()関数は、作成されたアカウントと値mを受け取ります。悪意のあるユーザーによるアカウントの再初期化を防ぐため、アカウントがすでに初期化されているかどうかを検証します(385〜388行目)。その後、mnの値、および署名者の公開鍵を割り当てることで、マルチシグアカウントを初期化します。

Lock()関数では、configアカウントの管理者アカウントがマルチシグアカウントであるかを確認します。もしそうであれば、渡された署名を検証し、カウントします(151〜158行目)。有効な署名の数が要求される量に達するか、それを超えると、ドアはロックされます(163〜168行目)。Unlock()関数におけるマルチシグの実装は、Lock()関数と同様です。

プログラムをテストネットにデプロイしました。以下のリンクで見ることができます。

https://explorer.solana.com/address/4g5ZA47pDQ1Bv93aNYdSKAXB6DvPAnnbi9cNEx7722SK?cluster=testnet

3.2 トランザクションの送信

InitializeMultisig()関数では、keysに4つのアカウントが含まれます。これらはマルチシグアカウントと3つの有効な署名者のアカウントです。署名者の一人がトランザクションのフィーペイヤーでもあることに注意してください。mの値を2に設定しました。これは、特権関数を実行するために3人の署名者のうち2人の署名が必要であることを意味します。

また、configアカウントの管理者を、マルチシグアカウントの公開鍵を命令データに渡すことで、multisigアカウントとして設定しました。

lock()関数では、configアカウント(410行目)に加えて、multisigアカウント(411行目)、および2つ(以上)の有効な署名者のアカウント(412〜413行目)を渡します。署名者に対してisSigner属性をtrueに設定しました。ここでも、unlock()関数のロジックはこれと同様です。

すべてのテストトランザクションを以下に示します。全体のプロセスはAllocate PDA()-> InitializeMultisig() -> InitializeDoor()-> InitializeConfig()-> Unlock() -> Open() -> Close()-> Lock()です。

https://explorer.solana.com/tx/2inXLHv34NzkmwmvQ7iimdNbEX2Hj8qWS3MVteAPtwhCAPy1yxXXdvfzMmUL7tESsd4wat4LMcPNiEQav18kQTrZ?cluster=testnet
https://explorer.solana.com/tx/4GErNusHLXpUHBsAJ55c7v1Ur1jfv5hAR88CK8nabLnzc92b1UhDnNRryKVjKmcnJDXppmyk6m5RUdpR2w7MEbrU?cluster=testnet
https://explorer.solana.com/tx/2S8h66oWfh7cn4fwFCVPtgGw1o3NgzyWwU1GyRpDjH4PEBfe8LDMZGAEBYLRJpzL3anH9ENShntjg3q5K8gcZSrN?cluster=testnet
https://explorer.solana.com/tx/nVKxPYegbpH324y57uHDZiajpNA5u4bSSJ2gHFHHRx4GJBy1DcpxnccKh1Ltkv9dah1qJNi9jWuBnXbyHWXCJyw?cluster=testnet
https://explorer.solana.com/tx/3KK5CU88oV59VfdTrNpT4LsiUsetuGdc6qW3sNyyGEWVYtKJfD6XA2Nfknrriwuka9wknHpZs3WZ1WkeduDA1pZX?cluster=testnet
https://explorer.solana.com/tx/3rFo37CrLSsMehLk4kwmMSDnbRfLfoPCWZzRDXhwwLg1uq32gu4ddxkYYB3pJX1yiMN8MofnV1Y9CSaf8bQaNJ9Y?cluster=testnet
https://explorer.solana.com/tx/5yFq4dZAMpccn96jKNkYFVcmhmtrwZYSFEQ6pkNgSMd7e1Vy1ztAM3RdFUZjEtThjFssz1TFytowePPyY59we9rX?cluster=testnet
https://explorer.solana.com/tx/3Ut4DqjCQi1MoCsjRx24DxykyDMsmyRsjJSXS7D4FBeZQwrx4UzxWt2gDe6YRiwUHzFkH3eWkFHub6FNSp2Us4Q7?cluster=testnet

3.3 テストトランザクション

マルチシグが実際に機能するかどうかをテストするために、クライアントのスクリプトを修正しました。

上記のように、署名者アカウントを1つだけ渡し、有効な署名も1つだけ提供しました。

署名が不足しているため、ドアをアンロックできないことがわかりました。

4. まとめ

本稿では、Solanaにおけるマルチシグの簡単な実装を紹介しました。これは、複数のユーザーからオフチェーンで署名を取得できるシナリオを対象としています。トランザクションが完全にオンチェーンで署名される必要があるシナリオについては、後日紹介します。引き続きフォローしてください。今後の投稿でさらに共有していきます。

このシリーズの他の記事を読む:


BlockSecについて

BlockSecは、世界的に著名なセキュリティ専門家グループによって2021年に設立された、先駆的なブロックチェーンセキュリティ企業です。当社は、Web3の世界におけるセキュリティとユーザビリティの向上に貢献し、その普及を促進することに尽力しています。そのために、BlockSecはスマートコントラクトおよびEVMチェーンのセキュリティ監査サービス、セキュリティ開発と脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡および調査のためのMetaSleuthプラットフォーム、そしてWeb3ビルダーが暗号通貨の世界を効率的にサーフィンするためのMetaSuites拡張機能を提供しています。

現在までに、MetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど300社以上の著名なクライアントにサービスを提供し、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalなどの著名な投資家から2回の資金調達で数千万米ドルを獲得しています。

公式ウェブサイト:https://blocksec.com/

公式Twitterアカウント:https://twitter.com/BlockSecTeam

Sign up for the latest updates
~$4.72M Lost: TAC, Transit Finance & More | BlockSec Weekly
Security Insights

~$4.72M Lost: TAC, Transit Finance & More | BlockSec Weekly

This BlockSec weekly security report covers 3 notable attack incidents identified between May 11 and May 17, 2026, across TRON, TON, and Ethereum, with total estimated losses of approximately $4.72M. Three incidents are analyzed in detail: the highlighted $1.88M Transit Finance exploit on TRON, where a deprecated swap bridge contract with lingering token approvals was exploited through arbitrary calldata forwarding; the $2.8M TAC TON-to-EVM bridge exploit caused by missing canonical wallet verification in the jetton deposit flow; and the $46.75K Boost Hook exploit on Ethereum, where spot price manipulation on a Uniswap V4 hook-based perpetual protocol forced the protocol to buy tokens at inflated prices using its own reserves.

~$15.9M Lost: Trusted Volumes, Wasabi & More | BlockSec Weekly
Security Insights

~$15.9M Lost: Trusted Volumes, Wasabi & More | BlockSec Weekly

This BlockSec bi-weekly security report covers 11 notable attack incidents identified between April 27 and May 10, 2026, across Sui, Ethereum, BNB Chain, Base, Blast, and Berachain, with total estimated losses of approximately $15.9M. Three incidents are analyzed in detail: the highlighted $1.14M Aftermath Finance exploit on Sui, where a signed/unsigned semantic mismatch in the builder-fee validation allowed an attacker to inject a negative fee that was converted into positive collateral during settlement; the $5.87M Trusted Volumes RFQ authorization mismatch on Ethereum; and the $5.7M Wasabi Protocol infrastructure-to-contract-control compromise across multiple EVM chains.

Newsletter - April 2026
Security Insights

Newsletter - April 2026

In April 2026, the DeFi ecosystem experienced three major security incidents. KelpDAO lost ~$290M due to an insecure 1-of-1 DVN bridge configuration exploited via RPC infrastructure compromise, Drift Protocol suffered ~$285M from a multisig governance takeover leveraging Solana's durable nonce mechanism, and Rhea Finance incurred ~$18.4M following a business logic flaw in its margin-trading module that allowed circular swap path manipulatio