> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anchorage.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Key management & recovery

> Manage wallet recovery shares, encrypted backups, and decrypt wallet keys.

export const ImageCarousel = ({images, perView = 3, children}) => {
  const [page, setPage] = useState(0);
  const [imgH, setImgH] = useState(0);
  const stripRef = useRef(null);
  const THUMB_MAX_WIDTH = 220;
  const PEEK_WIDTH = 34;
  useEffect(() => {
    const strip = stripRef.current;
    if (!strip) return;
    const measure = () => {
      const box = strip.querySelector("[data-carousel-imgbox]");
      if (box && box.clientHeight) setImgH(box.clientHeight);
    };
    measure();
    const ro = new ResizeObserver(measure);
    ro.observe(strip);
    return () => ro.disconnect();
  }, []);
  const fromChildren = React.Children.toArray(children).map(c => c && c.props && c.props.src ? {
    src: c.props.src,
    alt: c.props.alt
  } : null).filter(Boolean);
  const items = fromChildren.length ? fromChildren : images || [];
  if (!items.length) return null;
  const count = items.length;
  const columns = Math.min(perView, count);
  const totalPages = Math.ceil(count / columns);
  const showControls = totalPages > 1;
  const goTo = p => setPage((p % totalPages + totalPages) % totalPages);
  const prev = () => goTo(page - 1);
  const next = () => goTo(page + 1);
  const start = page * columns;
  const visible = items.slice(start, start + columns);
  const prevPeek = start > 0 ? items[start - 1] : null;
  const nextPeek = start + columns < count ? items[start + columns] : null;
  const renderPeek = (img, side) => {
    if (!img) return null;
    const isLeft = side === "left";
    return <button type="button" onClick={isLeft ? prev : next} aria-hidden="true" tabIndex={-1} style={{
      flex: `0 0 ${PEEK_WIDTH}px`,
      width: PEEK_WIDTH + "px",
      alignSelf: imgH ? "flex-start" : "stretch",
      height: imgH ? imgH + "px" : undefined,
      border: 0,
      padding: 0,
      cursor: "pointer",
      opacity: 0.5,
      borderRadius: isLeft ? "10px 0 0 10px" : "0 10px 10px 0",
      backgroundImage: `url("${img.src}")`,
      backgroundRepeat: "no-repeat",
      backgroundSize: "auto 100%",
      backgroundPosition: isLeft ? "right center" : "left center",
      WebkitMaskImage: `linear-gradient(to ${isLeft ? "left" : "right"}, #000 15%, transparent 100%)`,
      maskImage: `linear-gradient(to ${isLeft ? "left" : "right"}, #000 15%, transparent 100%)`
    }} />;
  };
  const arrowStyle = {
    flex: "0 0 auto",
    width: "30px",
    height: "30px",
    borderRadius: "50%",
    border: "1px solid var(--ad-border, #e4e5e7)",
    background: "var(--background, #fff)",
    fontSize: "16px",
    lineHeight: "28px",
    textAlign: "center",
    cursor: "pointer",
    padding: 0
  };
  return <div style={{
    outline: "none",
    margin: "1.5rem 0"
  }} role={showControls ? "group" : undefined} aria-label={showControls ? "Screenshot carousel" : undefined} aria-roledescription={showControls ? "carousel" : undefined}>
      <div style={{
    display: "flex",
    alignItems: "center",
    gap: "10px"
  }}>
        {showControls && <button type="button" onClick={prev} aria-label="Previous screenshots" style={arrowStyle}>
            ‹
          </button>}

        <div ref={stripRef} style={{
    display: "flex",
    flexWrap: "nowrap",
    alignItems: "flex-start",
    gap: "14px",
    justifyContent: "center",
    flex: 1
  }}>
          {renderPeek(prevPeek, "left")}
          {}
          {Array.from({
    length: columns
  }).map((_, i) => {
    const img = visible[i];
    const slotStyle = {
      margin: 0,
      flex: "1 1 0",
      maxWidth: THUMB_MAX_WIDTH + "px",
      minWidth: 0
    };
    if (!img) {
      return <div key={start + i} aria-hidden="true" style={{
        ...slotStyle,
        visibility: "hidden"
      }} />;
    }
    return <div key={start + i} style={slotStyle}>
                <span data-carousel-imgbox style={{
      display: "block"
    }}>
                  <img src={img.src} alt={img.alt ?? ""} style={{
      display: "block",
      width: "100%",
      height: "auto",
      margin: 0,
      borderRadius: "10px",
      border: "1px solid var(--ad-border, #e4e5e7)"
    }} />
                </span>
                {img.alt && <div style={{
      marginTop: "6px",
      fontSize: "12px",
      lineHeight: 1.4,
      color: "var(--ad-muted, #6b7280)",
      textAlign: "center"
    }}>
                    {img.alt}
                  </div>}
              </div>;
  })}
          {renderPeek(nextPeek, "right")}
        </div>

        {showControls && <button type="button" onClick={next} aria-label="Next screenshots" style={arrowStyle}>
            ›
          </button>}
      </div>

      {showControls && <div style={{
    textAlign: "center",
    marginTop: "8px",
    fontSize: "12px",
    color: "var(--ad-muted, #6b7280)"
  }}>
          {start + 1}
          {visible.length > 1 ? "–" + (start + visible.length) : ""} of {count}
        </div>}
    </div>;
};

## Organization recovery document

The organization recovery document is used to restore your access to Porto by Anchorage Digital if you lose access to all Porto-enrolled devices. Store a copy in a location where it will not be lost or forgotten.

<Warning>
  Anchorage Digital cannot restore your access if you lose your organization recovery document.
</Warning>

Unlike a seed phrase, the organization recovery document PDF is not sensitive material on its own — it is only relevant within Anchorage Digital's security architecture. Only a quorum of an organization's administrators can use it to initiate a recovery process.

You can back up additional copies of the organization recovery document at any time from **Settings > Recover access > Organization recovery document** in the Porto iOS app.

## Wallet recovery shares

Wallet recovery shares allow you to export your wallets outside of Porto if needed. You require 2 out of 3 recovery shares to access your wallet. A single wallet recovery share is not sensitive on its own.

<Warning>
  With 2 out of 3 shares, your wallets become accessible outside of Porto. Maintain the separation and security of each wallet recovery share to safeguard your wallets against unauthorized access.
</Warning>

### Distributing wallet recovery shares

After onboarding, distribute each share to a different team member to keep them separate and secure. Once a wallet recovery share is distributed to a team member, it is sent to that team member's device — only that specific team member can access it on that device.

<Note>
  We highly recommend onboarding to Porto with at least 3 users to ensure proper distribution of wallet recovery shares.
</Note>

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/3eHo4c6eQNfdmseu/knowledge-base/images/screenshots/porto-recovery-shares-unassigned.png?fit=max&auto=format&n=3eHo4c6eQNfdmseu&q=85&s=93d34c055dd30c09ffe38c362636d230" alt="Wallet recovery shares screen with three unassigned shares and a Distribute recovery shares button" width="828" height="1792" data-path="knowledge-base/images/screenshots/porto-recovery-shares-unassigned.png" />

  <img src="https://mintcdn.com/deployment-4/3eHo4c6eQNfdmseu/knowledge-base/images/screenshots/porto-recovery-shares-assigned.png?fit=max&auto=format&n=3eHo4c6eQNfdmseu&q=85&s=9aea5603cf09593d409c1bb119707447" alt="Wallet recovery shares screen showing three shares assigned to named team members, each pending backup" width="828" height="1792" data-path="knowledge-base/images/screenshots/porto-recovery-shares-assigned.png" />
</ImageCarousel>

### Backing up wallet recovery shares

If you have received one or more wallet recovery shares, you can back them up from **Settings > Recover access > Backup recovery shares** in the Porto iOS app, as long as you still have the original device you used to enroll in Porto.

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/3eHo4c6eQNfdmseu/knowledge-base/images/screenshots/porto-recovery-shares-backed-up.png?fit=max&auto=format&n=3eHo4c6eQNfdmseu&q=85&s=391427093bd0b1dd71a8ad86fb4101b5" alt="Wallet recovery shares screen showing all three shares with backup complete" width="828" height="1792" data-path="knowledge-base/images/screenshots/porto-recovery-shares-backed-up.png" />
</ImageCarousel>

## Encrypted wallet backups

Encrypted wallet backups are generated automatically with every wallet you create. They are not sensitive on their own and are accessible at any time from the web dashboard.

Encrypted wallet backups are required if you choose to access your wallets outside of Porto. To decrypt your wallet backups, you will need:

* 2 out of 3 wallet recovery shares
* A device enrolled in Porto **or** the organization recovery document

## Decrypting wallet keys

Administrators can access and decrypt encrypted private keys. A lead administrator must be elected and is responsible for scanning the required number of administrator QR codes to achieve quorum.

### Decrypting with an enrolled device

<Steps>
  <Step title="Open Decrypt private key">
    Go to **Settings** and tap **Decrypt private key**.
  </Step>

  <Step title="Gather materials">
    Retrieve your wallet PDF, elect a lead administrator, and tap **I'm ready to proceed**.
  </Step>

  <Step title="Scan the wallet PDF QR code">
    Scan the QR code in your wallet PDF.
  </Step>

  <Step title="Share new QR codes">
    Tap **I'm ready** again. A new QR code will be shown to all administrators, who must share their new QR code with the lead administrator for scanning.
  </Step>

  <Step title="Lead administrator scans QR codes">
    The lead administrator must scan the required number of administrator QR codes as displayed on screen to achieve quorum.
  </Step>

  <Step title="View decrypted key">
    Your private key will be decrypted once quorum is met.
  </Step>
</Steps>

### Decrypting with wallet recovery shares

<Steps>
  <Step title="Open Decrypt private key">
    Go to **Settings** and tap **Decrypt private key**.
  </Step>

  <Step title="Gather materials">
    Retrieve the encrypted wallet PDF and a quorum of wallet recovery dhares, then tap **I'm ready to proceed**.
  </Step>

  <Step title="Scan the wallet PDF QR code">
    Tap **Scan QR code** to initiate the operation. Scan the QR code on the encrypted wallet PDF and tap **Continue**.
  </Step>

  <Step title="Enter recovery share mnemonics">
    Input a quorum of the wallet recovery share mnemonic phrases and tap **Validate** to finish decryption.
  </Step>
</Steps>

<Warning>
  Be mindful of your surroundings when viewing your decrypted private key. Store it in a secure, offline location to ensure the safety of your funds.
</Warning>
